如何为同一服务器上托管的不同应用程序重置PHPSESSID cookie

时间:2013-05-02 16:39:24

标签: php session-cookies

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

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

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

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

我无法理解为什么A设置的PHPSESSID cookie不会让B设置任何cookie。反之则不然。

2 个答案:

答案 0 :(得分:1)

Cookie存在冲突,因为它们默认设置在完整域上,路径为/。因此,当2个应用程序都尝试启动会话时,将优先考虑。您可以使用session_set_cookie_params()覆盖默认路径,并因此删除冲突。您很可能需要在浏览器中手动删除任何“旧”cookie,因为它们会一直保持冲突,直到过期为止。

答案 1 :(得分:0)

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

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

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