为什么我的会话随机不保存?

时间:2011-05-04 15:32:36

标签: php session session-cookies

我们通过添加以下代码行修复了浏览器无法登录子域的问题。

ini_set('session.cookie_domain', '.'.get_domain('http://'.$_SERVER['SERVER_NAME']));

get_domain函数获取网站的域名,以便“sub.sub.domain.com”返回“domain.com”。我们前置一个“。”这样我们的会话在所有子域中都很好。

修复了无法登录的问题,但现在的问题是,自从我们添加了这行代码后,我们将 随机 无法登录,因为会话未创建,只是NULL。

我随意说,因为我无法弄清楚是什么导致了它。有一天用户可以登录,他们会尝试第二天登录,但不起作用。清除cookie通常可以解决问题。知道我可能做错了什么吗?我已经尝试使用谷歌搜索,但没有找到任何有帮助的东西,我们的用户感到沮丧,我的想法已经不多了。任何帮助都非常感谢。

3 个答案:

答案 0 :(得分:1)

  

清除Cookie通常可以解决问题。

看起来我有一个缓存问题,但这只是一个假设。

仅从您的描述中就很难判断问题出在浏览器端还是服务器端。

我可以给你的最佳建议是在登录表单上实施cookie测试。在用户实际输入他/她的凭据之前,您需要设置测试Cookie并使用其他test get参数重定向到同一页面。如果使用此附加test参数请求页面,则会检查测试cookie是否已成功设置。

只有在测试通过后才允许登录。否则,请提供错误消息并告知用户有关技术问题。

这可以帮助您确定问题何时实际发生。此外,如果出现可能有助于您调试问题的错误,您甚至可以从服务器端添加更多信息。

答案 1 :(得分:1)

只是为了排除它,请尝试使用常量字符串设置域,而不是使用get_domain()这样的内容来推导它:

ini_set('session.cookie_domain', '.foo.com');

在浏览器中查看.foo.com上设置的Cookie以及sub.foo.com上可能设置(或设置)的任何旧Cookie

我看到了一些类似于你所描述的问题,因为某些cookie不能被不同的服务器看到。问题在于,sub.foo.com可能已经定义了一个cookie条目,你没有删除它,只有它才能看到它。由www.foo.com上的.foo.com设置新Cookie,因为www.foo.com无法看到sub.foo.com Cookie。

我希望这是有道理的......

答案 2 :(得分:0)

事实证明,我忘了在其中一个标题中改变这个设置,这些标题让所有事情都失控了。

(很抱歉回答我自己的问题,请大家投票帮忙)