19

首先,我不确定这是否是 Opera 12.01 中的问题,但问题仅出现在 Opera 中。我已经在 Android 和 iPhone 上的 FF14、Chrome 21、Safari 5 (Windows) 和 Safari Mac 和 Webkit 浏览器中进行了测试。

我的应用程序在 trigger.io forge 平台上运行,使用代理将请求从 Web 应用程序路由到服务。代理只是简单地转发请求和 cookie,这在大多数浏览器中都按预期工作。

在蜻蜓检查请求后,我注意到服务器在响应中发送了正确的标头,但 Opera 似乎忽略了设置值。我想知道这是否是由于 cookie 的路径值配置错误造成的。我附上了 Firefox 和 Opera 中 2 个请求的屏幕截图。

正如您在屏幕中看到的那样,FF 看到 cookie 标题并适当地设置它们,但 Opera 没有。

火狐请求

火狐请求

Opera 请求 1 屏幕

歌剧请求 1

Opera 请求 2 屏幕

歌剧请求 2

我没有包含来自代理的代码来进行请求转发,所以如果你需要它来获得一些见解,请告诉我。在服务端,我正在运行 PHP 和 Codeigniter。如果我需要在我的环境中添加更多信息,请告诉我,谢谢。

更新:即使在我不使用自定义 TLD 的生产环境中也会出现此问题。其他使用 cookie 的网站运行良好,并且启用了 cookie。

4

3 回答 3

8

cookie 值中的双引号在形式上是非法的。如果您将它们转义为%22它将起作用。

于 2012-08-14T14:36:26.217 回答
5

您是否检查过这是否是 cookie 域的问题?我假设您正在使用 Javascript 来设置/读取 cookie?无论如何,您可能需要检查 4 个 cookie 域问题(我知道旧 FF 版本存在这些问题):

1 - 检查非法 cookie 字符:允许的 cookie 字符可能不允许您在 cookie 名称中使用 '-' 或 '=',并且您根本不应该在 cookie 中使用非 ASCII 字符。base64 编码可能会处理这个问题。

2 - 检查您设置 cookie 的域(通过 javascript 代码或任何其他方式)与执行代码的域相同。

3 - 检查 cookie 域是否不是 localhost;看看您是否可以测试从远程域设置 cookie

4 - 如果您使用 JS 设置 cookie,请尝试测试是否可以在浏览器中使用 CGI 设置 cookie,以确保这不是浏览器问题。如果它应该有效,请查看您是否可以使用 JS 读取 cookie(而不是设置它)。

请在评论中告诉我这是怎么回事,我已经多次处理过类似的问题,并且根据您从这些检查中得到的结果,我很确定我可以帮助您解决问题。

于 2012-08-15T17:59:29.793 回答
-1

查看那些 Opera 屏幕截图,它们似乎是在同一秒内处理的 AJAX / XHR 请求。Javascript是否有可能“同时”触发这两个请求,因此“第一个”的响应在构建“第二个”的请求之前没有到达 - 因此尚未设置cookie?

我不熟悉您使用的技术/工具包,所以不知道这些是库存代码还是您的自定义应用程序的一部分。

于 2012-08-12T16:34:12.600 回答