Http 在什么情况下,AJAX请求不能由触发AJAX的页面设置cookies?
从查看服务器日志(我无法在任何浏览器上重现这种情况)中推断出,在很小的一部分时间内,我们会看到这样的流:Http 在什么情况下,AJAX请求不能由触发AJAX的页面设置cookies?,http,cookies,session-cookies,setcookie,Http,Cookies,Session Cookies,Setcookie,从查看服务器日志(我无法在任何浏览器上重现这种情况)中推断出,在很小的一部分时间内,我们会看到这样的流: 当客户点击我们的页面时: 没有饼干 获取带有Set CookieHTTP响应头的响应,该响应头为会话id B body让JS发出AJAX请求/AJAX/foo 在+1秒的时间内,客户端向我们发出AJAX请求,请求/AJAX/foo 正如预期的那样,referer被设置为步骤1中触发AJAX的页面 没有饼干-为什么 获取一个带有Set Cookie头的响应,该头为他们提供了一个会话id
- 没有饼干
- 获取带有
HTTP响应头的响应,该响应头为会话id BSet Cookie
- body让JS发出AJAX请求
/AJAX/foo
/AJAX/foo
- 正如预期的那样,referer被设置为步骤1中触发AJAX的页面
- 没有饼干-为什么
- 获取一个带有
头的响应,该头为他们提供了一个会话id C(应为C,因为他们没有向我们发送Cookie)Set Cookie
Set-Cookie
响应头。因此,在我看来,客户端总是会发回我们在激发AJAX请求的页面中设置的cookie。除非浏览器没有及时处理Set Cookie
响应,否则我看不出这是怎么回事
正如我所说,我无法在Firefox、Safari或Chrome中重现这一点,但我们每天都会看到好几次。google Chrome中有一个新功能可能会导致这种错误行为。它被称为预渲染 预渲染是Chrome(13及以上版本)中的一项实验性功能 这可以从网站作者那里得到提示,以加快浏览速度 用户体验。网站作者在HTML中包含一个元素 指示Chrome提前获取并呈现附加页面 用户实际单击它 即使您自己没有主动触发预渲染,它也是 仍然有可能其他网站会指示Chrome进行预渲染 你的网站。如果您的页面正在预呈现,它可能会,也可能永远不会 显示给用户(取决于用户是否单击链接)。在里面 绝大多数情况下,你不应该做任何特殊的事情 要处理预呈现的页面,它应该可以正常工作 欲了解更多信息,请阅读: 编辑:
您可以通过以下命令触发页面上的预呈现:a)cookie是否有过期时间 b) 如果是这样的话,您是否尝试过通过将计算机的时钟向后或向前设置超过cookie的TTL来复制它?(很明显,我指的是运行浏览器的计算机的时钟,而不是运行应用程序的服务器……应用程序应该是一台时钟设置准确的独立计算机。)
我也看到了这一点;它似乎是由系统时钟出错的用户触发的。从浏览器的角度来看,发送的cookie的过期日期已经过了。这是一个非常好的主意,谢谢,但我不这么认为,因为我在一堆不同的用户代理中看到过它,它们不是Chrome。这是一个有趣的想法。谢谢后来我换了公司,所以这个问题不再出现在我的雷达上,但如果我看到类似的问题,我可能会在以后的某个时候再提到这个问题。再次感谢!