繁体   English   中英

浏览器:刷新时Cookie丢失

[英]Browser: Cookie lost on refresh

我在Chrome浏览器中遇到了我的应用程序的奇怪行为(其他浏览器没问题)。 刷新页面时,cookie正在正常发送,但间歇性地浏览器似乎没有在某些刷新时传递cookie。

这是我设置我的cookie的方式:

$identifier = / some weird string /;
$key = md5(uniqid(rand(), true));
$timeout = number_format(time(), 0, '.', '') + 43200;
setcookie('fboxauth', $identifier . ":" . $key, $timeout, "/", "fbox.mysite.com", 0);

这是我用于页面标题的内容:

header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1
header("Expires: Thu, 25 Nov 1982 08:24:00 GMT"); // Date in the past

您是否在此处看到可能影响Cookie处理的任何问题? 谢谢你的任何建议。

编辑-01:

似乎cookie没有发送一些请求。 这种情况间歇性地发生,我现在看到所有浏览器的这种行为。 有人遇到过这种情况吗? 是否有任何情况下cookie不会随请求一起发送?

编辑-02:

以下是HTTP标头:

 Request Method:GET Status Code:200 OK 

请求标题

 Accept:application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5 Referer:http://fbox.mysite.com/dashboard User-Agent:Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/532.5 (KHTML, like Gecko) Chrome/4.1.249.1045 Safari/532.5 

响应标题

 Cache-Control:no-cache, must-revalidate Content-Length:8903 Content-Type:text/html Date:Tue, 06 Apr 2010 09:25:26 GMT Expires:Thu, 25 Nov 1982 08:24:00 GMT Last-Modified:Tue, 06 Apr 2010 09:25:26 GMT Pragma:no-cache Server:Microsoft-IIS/7.5 X-Powered-By:PHP/5.3.1 ZendServer 

再次感谢,任何指南。

一个问题,一个建议 -

问题 - 为什么你在time()上执行number_format(...),因为time()+ 43200就足够了。

建议 - 您是否查看了客户端和服务器之间的时钟。 由于你只给出了两者之间的12小时差异,如果在两台机器之间存在大的时钟偏差或者GMT时的分歧,你可能会发现你正在发送一个预定到期的cookie。不远的将来。

在看到你的标题信息后,我唯一能想到的就是PHP在你设置cookie之前输出了一些东西。 如果是这种情况,setcookie应返回false并且您将收到警告“无法发送会话Cookie - 已发送的标头”正如Bart S.建议的那样,打开error_reporting(E_ALL)并尝试输出setcookie的返回值以验证这一点事实并非如此。

另外,尝试在基本情况下使用setcookie只使用名称和值,然后再次检查响应头。 然后删除除了setcookie之外的所有代码,如果有效,请使用除法和征服将所有代码带回来:)

你处理你的cookie的方式完全没问题,你的代码中的一切似乎都没问题,问题似乎在于Chrome。

虽然Chrome问题#3014主要涉及Java小程序,但似乎正是您所遇到的问题。

我之前见过类似的问题。 我会仔细检查一下路径是否正确。

我认为www.domain.com/domain.com不同, www.domain.com也是如此(尾随正斜线)

除此之外,请检查PHP是否有权将其会话写入具有正确写入权限的文件(根据发行版,它是一个不同的目录,但phpinfo()应该告诉您它尝试使用的目录。)

我之前遇到过这两个问题。 第一个没有给出错误,似乎模仿你正在经历的东西,第二个给出了某种文件写入访问错误但是如果没有显示错误你可能看不到。

您的应用程序是通过http协议还是file://提供的?

Chrome不会将Cookie存储在本地应用中,而且这是设计使然。 您可以使用命令行开关更改此行为:

--enable-文件饼干

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM