Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在Opera中未正确来回发送Cookies_Php_Cookies_Opera_Trigger.io - Fatal编程技术网

Php 在Opera中未正确来回发送Cookies

Php 在Opera中未正确来回发送Cookies,php,cookies,opera,trigger.io,Php,Cookies,Opera,Trigger.io,首先,我不确定这是否是Opera 12.01中的问题,但问题只发生在Opera中。我已经在Android和iPhone上的FF14、Chrome 21、Safari 5(Windows)、Safari Mac和Webkit浏览器中进行了测试 我的应用程序运行在trigger.io平台上,并使用代理将请求从web应用程序路由到服务。代理只是简单地转发请求和cookie,这在大多数浏览器中都能正常工作 在dragonfly中检查了请求之后,我注意到服务器在响应中发送了正确的头,但是Opera似乎忽略

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

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

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

正如您在屏幕中看到的,FF可以看到cookie头并对其进行适当设置,但Opera没有

我还没有包括代理服务器发送请求的代码,所以如果您需要了解更多信息,请告诉我。在服务端,我正在运行PHP和Codeigniter。如果我需要在我的环境中添加更多信息,请告诉我,谢谢


更新:即使在不使用自定义TLD的生产环境中,也会出现此问题。其他使用cookie的站点工作正常,cookie已启用

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


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

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

您检查过cookie域是否存在此问题吗?我假设您正在使用Javascript设置/读取cookies?在任何情况下,您都可能需要检查4个cookie域问题(我知道旧FF版本存在这些问题):

1-检查非法cookie字符:可能不允许在cookie名称中使用“-”或“=”,并且不应在cookie中使用非ASCII字符。base64编码可以处理这个问题

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

3-检查cookie域是否不是本地主机;查看是否可以从远程域测试设置cookie

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


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

愚蠢的问题,但是您的Opera安装中是否启用了Cookie(设置>首选项>高级>Cookie)?如果是这样,您可以考虑设置<代码>不显示Cookie域错误=0 < /代码> <代码> > [用户预置]在
operaprefs.ini
中查看Opera是否因为您的私人
.locdev
TLD的适当限制级别不确定而拒绝cookie。我在
中找到了关于:config
的设置,并取消了它,但没有解决问题。Cookie也已启用,其他站点工作正常。我应该提到,即使在我的生产环境中也会发生这种情况,所以这不是TLD造成的。将把这些信息添加到问题中,谢谢。有几个初步想法-Opera是唯一支持Set-Cookie2的浏览器。我不知道这意味着什么,但也许这与问题有关?另一个想法-你为/_forge路径设置了多少cookie:Opera限制为30,而Firefox限制为50,不清楚新cookie会导致旧cookie消失还是被拒绝。浏览器的使用方式可能会有所不同。@AmirNathoo将查看set-cookie2,谢谢。至于数量,我们只有大约4-5块饼干。绝对不超过10,所以也不应该是这样。另外,我在一次干净的安装中检查了它,但它仍然失败。不,它们不是在同一秒内运行的。我已经按顺序设置好了。如果你查看响应,你可以看到cookies被返回,但没有实际使用。那么为什么你的两个Opera截图都将响应时间列为“Wed,08 Aug 2012 17:00:09 GMT”?是的,服务器在两个响应上都设置了cookies,但是如果浏览器在看到第一个响应之前创建了第二个请求,那么它当然不会将这些cookies发送回去。这一点很好,但我检查了它,这似乎没有什么区别。我将第二个请求延迟了2秒,但仍然没有改变。这是从本地设置抓取的,所以这就是时间戳如此接近的原因。我可以向你保证代码是按顺序运行的,这很公平。这是一个基于现有证据的合理理论,所以我很高兴你通过实验排除了它。Cookie是由PHP codeigniter设置的,它似乎正在对其进行编码,因此应该是干净的。这些域是相同的。我的live server上存在此问题。我的本地服务器没有命名为localhost。唯一似乎正在经历的cookies是那些由JS设置的cookies。PHP cookies似乎不起作用。顺便说一句,这只会在歌剧中中断。其他一切都很好。有很多原因可能会导致这种情况:您是否检查过邮件头没有事先发送?可能在cookie之前抛出了一个隐藏的PHP通知