【问题标题】:Why are my sessions randomly not saving?为什么我的会话随机不保存?
【发布时间】:2011-06-16 04:25:34
【问题描述】:

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

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

get_domain 函数获取站点的域,因此“sub.sub.domain.com”将返回“domain.com”。我们在前面加上一个“。”以便我们的会话在所有子域中都很好。

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

我随机说是因为我不知道是什么原因造成的。一天用户能够登录,他们尝试在第二天登录,但它不起作用。清除 cookie 通常可以解决问题。知道我可能做错了什么吗?我试过谷歌搜索,但没有发现任何有用的东西,我们的用户感到沮丧,我的想法也用完了。非常感谢任何帮助。

【问题讨论】:

    标签: php session session-cookies


    【解决方案1】:

    清除 cookie 通常会解决问题。

    对我来说似乎存在缓存问题,但这只是一个假设。

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

    我能给你的最好建议是在登录表单上实施 cookie 测试。在用户实际输入他/她的凭据之前,您正在设置一个测试cookie 并使用额外的test 获取参数重定向到同一页面。如果使用此额外的 test 参数请求页面,则会检查测试 cookie 是否已成功设置。

    只有通过测试才允许登录。否则给出错误消息并告知用户技术问题。

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

    【讨论】:

    • 我正在使用会话 cookie,而不是通过 set_cookie 函数手动设置 cookie。你是说我应该在登录之前看看是否可以创建一个cookie?我不太明白你的 GET 测试建议。
    • 测试只是为了测试设置cookie是否有效,如果设置cookie有效,则仅提供登录表单。要测试是否可以设置 cookie,您需要设置 cookie,让浏览器执行附加请求,并在该附加请求中检查 cookie 是否已设置。测试 cookie 是另一个 cookie,然后是会话 cookie。您是否设置了更多其他 cookie?
    • 谢谢,但事实证明我忘记在我的一个标题中进行更改。我很尴尬。
    【解决方案2】:

    为了排除它,请尝试使用常量字符串设置域,而不是使用get_domain() 派生它:

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

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

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

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

    【讨论】:

    • 所以你认为 www.foo.com 可能看不到 sub.foo.com 的 cookie?在对值进行硬编码之前,我试图弄清楚我在寻找什么,因为我们目前有大约 45 个网站运行这个登录脚本,所有这些网站都使用不同的域名。对该值进行硬编码可能会将所有人拒之门外(这意味着我可能不得不在下班时间这样做:))
    • 嗯,原来我忘记在我的一个标题 (facepalm) 中进行更改,这会导致问题取决于您来自哪里。
    【解决方案3】:

    原来我忘记在其中一个标题中更改此设置,这让一切都乱了套。

    (抱歉回答了我自己的问题,请大家投票以寻求帮助)

    【讨论】:

      猜你喜欢
      • 2020-05-20
      • 2011-03-06
      • 2015-05-25
      • 1970-01-01
      • 2023-01-28
      • 2021-12-13
      • 2013-09-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多