首先,我不确定这是否是Opera 12.01中的问题,但问题只出现在Opera中。我在Android和iPhone上测试过FF14,Chrome 21,Safari 5(Windows)以及Safari Mac和Webkit浏览器。
我的应用程序在trigger.io forge平台上运行,并使用代理将来自Web应用程序的请求路由到服务。代理只是简单地转发请求和cookie,这在大多数浏览器中按预期工作。
在检查了dragonfly中的请求后,我注意到服务器在响应中发送了正确的标题,但Opera似乎忽略了设置值。我想知道这是否是由于cookie的一些配置错误的路径值。我在Firefox和Opera中添加了2个请求的屏幕截图。
正如您在屏幕中看到的那样,FF会看到Cookie标题并正确设置它们,但Opera不会。
我没有包含执行请求转发的代理中的代码,因此如果您需要,请告诉我以获得一些见解。在服务端,我正在运行PHP和Codeigniter。如果我需要在我的环境中添加更多信息,请告诉我,谢谢。
更新:即使在我的生产环境中也不会使用自定义TLD,也会出现此问题。其他使用cookie的网站工作正常,并启用了cookie。
答案 0 :(得分:8)
双引号在cookie值中是正式非法的。如果你将它们作为%22 进行转义,它将会起作用。
答案 1 :(得分:5)
您是否检查过这是否存在Cookie域问题?我假设您正在使用Javascript来设置/读取Cookie?在任何情况下,您可能需要检查4个cookie域问题(我知道我在旧的FF版本中遇到过这些问题):
1 - 检查非法cookie字符:allowed cookie characters您可能不允许在cookie名称中使用“ - ”或“=”,并且您根本不应在cookie中使用非ASCII字符。 base64编码可能会处理这个问题。
2 - 检查您设置cookie的域(通过javascript代码或任何其他方式)是否与执行代码的域相同。
3 - 检查cookie域是否不是localhost;看看你是否可以测试从远程域设置cookie
4 - 如果您使用JS设置Cookie,请尝试测试您是否可以在浏览器中使用CGI设置Cookie,以确保它不是浏览器问题。如果它应该工作,看看你是否可以使用JS读取cookie(而不是设置它)。
让我知道评论中的内容如何,我已经多次处理类似问题,并且根据您对这些检查的结果,我很确定我可以帮助您解决问题。
答案 2 :(得分:-1)
查看Opera截图,它们似乎是在同一秒内处理的AJAX / XHR请求。 Javascript是否可能“同时”触发这两个请求,因此来自“first”的响应在构建“second”请求之前没有到达 - 因此cookie尚未设置?
我不熟悉您正在使用的技术/工具包,因此不知道这些是股票代码还是自定义应用程序的一部分。