4

一些背景:

除了 PHPSESSID,CakePHP 还会编写自己的会话 ID cookie。这用于验证请求。然后 SWFupload 发送一个文件,该令牌进行身份验证,并作为新的用户代理被拾取 - 所以在 cakephp 中,您必须禁用“check-user-agent”安全功能。

在许多浏览器上,这已经足够了。IE7 版本和 SWF 版本似乎与这个 bug 没有关联。在我们的例子中,IE7 存储/发送了同一个 cookie 的两个版本。那么第一个问题是为什么?如何?

进一步说明:

因为这些重复的 cookie 存储在标头字符串的开头和结尾,所以 PHP/Cake 如果它是重复的,则接收一端,因此它“选择”一个,而我在 swfobject 中设置和发送的手动 cookie 是另一个 cookie。我可以想出一些技巧来解决这个问题——但我真的很想知道这种情况最初是如何出现的。

CakePHP 似乎也不会在注销和登录时生成唯一的 CakeSession id,这可能是原因,解决方案可能是强制 cake 在任何地方使用 PHPSESSID,或者只是确保 swfupload 发送正确的 SESSID ...

编辑一:CakePHP 发送的 cookie 的标头是:

Set-Cookie: CAKEPHP=gqlpa88blmhmdsmv9e99ga16b3; expires=Thu, 13-Aug-2009 13:21:02 GMT; path=/
Set-Cookie: CAKEPHP=deleted; expires=Wed, 06-Aug-2008 13:21:01 GMT; path=/
Set-Cookie: CAKEPHP=ob5695trnspprlohiunrpqgkm0; expires=Thu, 13-Aug-2009 13:21:02 GMT; path=/

欢迎任何想法!

4

2 回答 2

7

如果为不同的域或路径设置了两个 cookie,则它们可能具有相同的名称。

例如,如果您在“www.example.com”和“example.com”上设置了一个 cookie“ID”,那么对于“www.example.com”或“anything”的每个请求都会发送两个 ID cookie。 www.example.com”。

为防止这种情况,请确保您始终为同一域设置 cookie,并且如果您碰巧有多个域名别名为同一服务器(例如 www.example.com 和 example.com),则将一个重定向到另一个.

同样,不要将同名的 cookie 设置为不同的路径值。

于 2009-08-07T01:32:01.570 回答
4

据我记得,如果您设置了一个已经存在的 cookie,它只会覆盖旧 cookie 的值和到期日期……这是每个域的。意味着您可以在 / 和 /anything 下拥有 2 个具有相同名称的 cookie,并且它们不会相互覆盖。

cookie 在其站点中的名称是唯一的。至少在标准上。不知道IE7是不是跟这个的。

还是不是您要问的?

问候

于 2009-08-06T14:51:03.520 回答