Cookies在某些Android浏览器上不会更新

时间:2014-04-21 15:51:29

标签: php android cookies

我开发了两步验证登录,使用Cookie检查设备是否已经过验证:此Cookie包含唯一ID和随机密码,该密码随设备的每次访问而变化。 要做这个更新,我使用这个PHP代码

setcookie('nameofthecookie', '', time()-600,"/");
setcookie('nameofthecookie', $newcookiecontent, time()+2629743,"/");

这在大多数浏览器上都能很好地运行,但它不适用于某些Android浏览器:事实上,使用它们时,cookie不会更新。

我尝试过做的事情:

  1. 仅使用

    创建Cookie

    setcookie(' nameofthecookie',$ newcookiecontent,time()+ 2629743," /");

    可行;

  2. 仅使用

    删除Cookie

    setcookie(' nameofthecookie','',time() - 600," /");

    可行

  3. 有人可以建议我一个解决方案吗?

1 个答案:

答案 0 :(得分:0)

您的代码会导致以下标题发送到客户端:

Set-Cookie nameofthecookie=deleted; expires=Thu, 01-Jan-1970 00:00:01 GMT; Max-Age=0; path=/ 
           nameofthecookie=somevalue; expires=Sat, 24-May-2014 22:11:13 GMT; Max-Age=2629743; path=/

根据RFC for HTTP Cookies(第9页),如果路径相同,则未定义浏览器将选择哪个Cookie:

  

如果多个cookie符合上述标准,则在WB中订购   Cookie标头使得那些具有更具体路径属性的人   先于那些具体不太明确的人。与其他相关的订购   属性(例如,域)未指定。

因此,Android浏览器可能会选择具有emtpy值的cookie,而桌面浏览器会选择较晚的cookie。 Netscape specification for cookies表示

  

相同路径和名称的实例将相互覆盖   最新的实例优先。相同路径的实例但是   不同的名称将添加其他映射。

实际上,在设置新值之前,您无需将cookie重置为空值。只需删除代码的第一行即可。

有关使用PHP管理Cookie的详细信息,请参阅this tutorial