gpt4 book ai didi

跨子域的 PHP session 2

转载 作者:搜寻专家 更新时间:2023-10-31 20:49:36 25 4
gpt4 key购买 nike

这是 PHP Sessions across sub domains 的补充
我尝试了那个问题上的指示,但我发现问题没有给出。

所以我需要跨子域(www.example.comforum.example.com)进行 session

我在 www.example.com 上所做的是

session_name("a_name");
session_set_cookie_params(0, '/', '.example.com');
session_start();

echo session_id();
$_SESSION['test'] = 123;

forum.example.com

session_name("a_name");
session_set_cookie_params(0, '/', '.example.com');
session_start();

echo session_id();
print_r($_SESSION);

session_id完全一样,但是$_SESSION什么都不输出。
如何使 forum.example.com 输出 123

我尝试了 session.cookie_domain = .example.com 但没有任何改变

当我继续访问 forum.example.com 时,它会破坏 www.example.com session ,并且在其他方​​面做同样的事情,就像它检测到它来自另一个子域并为了安全而删除所有内容。

2 个子域在同一个 Debian 服务器上

我注意到的另一件事是,如果没有 session_namesession_set_cookie_params,当我设置 session.cookie_domain 时,它仍然具有完全相同的 session_id/p>

谢谢

最佳答案

好的,我考虑了一段时间,我想我明白了。

首先要做的事情是:由于您从两个 服务器获得相同 session ID,我们可以排除任何与 cookie 相关的问题。显然,您成功创建了一个名为 a_name 的 cookie。 (虽然我会 recommend only alphanumeric characters for that cookie name )在 www.example.com , 并成功读取 a_name cookies forum.example.com .但是,正如您所说,您没有从 forum.example.com 获得任何数据。 . session.cookie_lifetime = 0不是问题:这只是意味着 session cookie remains until the browser is closed .

我们应该更深入地研究 PHP 的 session 处理。您正在使用 session_id() 读出的 session ID指的是您服务器上的文件。通常,该文件存在于 /tmp/sess_$session_id 中.该文件的内容是您的 $_SESSION数组,序列化。 (请记住,数据是 not serialized the same way,PHP 中的 serialize() 确实...但现在这并不重要。)

我认为这是与文件权限相关的问题:

  1. /tmp/sess_$session_id文件设置为 www.example.com的用户和组。
  2. forum.example.com试图打开 /tmp/sess_$session_id ,但没有适当的权限
  3. 因此,您在尝试 print_r($_SESSION); 时得到的结果是空的

解决方案:
检查服务器的配置文件以确保 www.example.comforum.example.com相同的用户和组运行。这很关键!对于 Apache,找到您的 *.conf 文件:

User youruser
Group yourgroup

对于nginx,找到nginx.conf:

user youruser yourgroup;

如果更改服务器配置文件不是一个选项,那么您应该确保运行这两个站点的用户在同一组中。

您可以通过首先加载 www.example.com 来验证这是问题所在然后 sudo ls -ltc sess_*在服务器的 shell 中,通过 SSH(找到以 sess_ 结尾的 $session_id)。接下来,加载 forum.example.com然后 sudo ls -ltc sess_*再次查看用户和/或组更改。

关于跨子域的 PHP session 2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9612927/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com