2

我有两个应用程序 A 和 B 托管在同一台服务器上。实际上,B 是 A 的子应用程序,位于 A 的子目录中。

主 (A) 应用程序使用默认的 php 会话实现,而 B 在数据库中实现会话。仅供参考。

当我在新浏览器中或访问 A 之前访问应用程序 B 时,它的 cookie 设置得很好。

但是,当我第一次访问 A 时,会设置一个 PHPSESSID cookie。现在,当我访问 B 时,没有设置 B 的 cookie。

我不知道为什么 A 设置的 PHPSESSID cookie 不允许 B 设置它的任何 cookie。反过来是不正确的。

4

2 回答 2

1

cookie 是冲突的,因为它们默认设置在完整域上,带有 path /。因此,当 2 个应用程序都尝试启动会话时,将具有优先权。您可以使用session_set_cookie_params()覆盖默认路径,从而消除冲突。您很可能需要手动删除浏览器中的任何“旧”cookie,但之后它们将保持冲突直到过期。

于 2013-05-02T16:42:38.507 回答
0

好的,这个肮脏的修复解决了这个问题。

unset($_COOKIE[session_name()]);
session_destroy();
session_start();  

我称其为脏修复,因为您可能无法在您的应用程序中取消设置和销毁会话。但是我的只需要在身份验证模块(一个地方)上,我很好。

于 2013-05-06T16:24:17.157 回答