我开发了两步验证登录,使用Cookie检查设备是否已经过验证:此Cookie包含唯一ID和随机密码,该密码随设备的每次访问而变化。 要做这个更新,我使用这个PHP代码
setcookie('nameofthecookie', '', time()-600,"/");
setcookie('nameofthecookie', $newcookiecontent, time()+2629743,"/");
这在大多数浏览器上都能很好地运行,但它不适用于某些Android浏览器:事实上,使用它们时,cookie不会更新。
我尝试过做的事情:
仅使用
创建Cookiesetcookie(' nameofthecookie',$ newcookiecontent,time()+ 2629743," /");
和可行;
仅使用
删除Cookiesetcookie(' nameofthecookie','',time() - 600," /");
和可行。
有人可以建议我一个解决方案吗?
答案 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。