在不同子域中使用会话的问题

时间:2010-08-11 12:46:25

标签: php session

我需要在不同的子域中使用相同的会话。

首先我放

php_value session.cookie_domain ".aaaa.com"

在.htaccess文件上并将其上传到根路径。

当我需要使用会话时。我只是打电话给

session_start();

有时候它会起作用但有时却不起作用。

我对此进行了测试并发现了。

  1. 如果我是第一次登录页面,请登录并转到子域名页面。它有效!

  2. 如果我转到子域名页面并点击登录页面并通过javascript window.location ='http://sub.aaaa.com'返回子域名页面;它不起作用!!

  3. 如果我使用同一帐户在2个网络浏览器上登录,则无法使用!!

  4. 还有其他方法吗?或者我该如何解决这个问题。我希望我的网站使用单一登录。

2 个答案:

答案 0 :(得分:0)

  1. 确保您使用会话的每个页面上都有session_start(),包括一些可能对用户不可见的页面。

  2. 如果您使用两个网络浏览器,会话彼此独立,这是设计使然。

答案 1 :(得分:0)

要调试您的#2问题,请使用HTTP监视器(例如HTTPFox)在您登录和浏览时查看来自/来自服务器的标头,确保使用正确的方式正确设置Cookie域和路径限制。

Probm#3 - 我不确定你得到了什么。您使用的是两个单独的浏览器(比如Firefox和Chrome吗?),还是说您使用的是同一浏览器的两个窗口/标签?对于第一种,两种不同的浏览器不会共享cookie,所以你不能在它们之间共享一个会话,而不需要做一些黑客手动在它们之间传输cookie。

对于同一浏览器的两个不同选项卡/窗口,此类实现取决于您的登录逻辑。如果登录脚本无条件地启动新会话,那么第二次登录尝试将从第一次登录时获得完全独立的会话,并且很可能也会覆盖第一个登录的cookie。