子域和ini_set之间的会话

时间:2018-01-21 21:40:45

标签: php session

我参与了一个非常棒且有效的网络工具。我决定更改域名,所以我下载了所有内容并将所有内容上传到新域名。

我的登录系统真的很差,但它的工作原理如下:

  • 在domain.com/login.php上提供电子邮件/密码,系统会在同一页面上检查它们是否存在于数据库中。
  • 如果有,则用户的所有信息都存储在$ _SESSION
  • 之后您将重定向到client.domain.com
  • 在这里,如果设置了$ _SESSION ['username'],你就可以了。如果没有,您将被重定向回登录页面

为了保持子域之间的数据,我在分配$ _SESSION值之前放置了这个:

ini_set("session.cookie_domain", "client.domain.com");
ini_set("session.cookie_domain", "mods.domain.com");
ini_set("session.cookie_domain", "domain.com");
ini_set("session.cookie_domain", "domain.com");
session_start();
$_SESSION['username'] = Other-code;

当然,当我更改域名时,我使用新域名更改了“domain.com”。

可悲的是,我注意到它没有任何理由停止工作.. 我已经在这里检查了所有类似的问题,但是即使我按照它们操作,我也按照自己的意愿执行操作.. $ _SESSION对于子域名是空的。

如果您需要任何其他信息,请与我们联系。 提前谢谢!

1 个答案:

答案 0 :(得分:1)

ini_set("display_errors","on")在第一行查看是否有任何错误。

在前4行中,删除这3行

ini_set("session.cookie_domain", "client.domain.com");
ini_set("session.cookie_domain", "mods.domain.com");
ini_set("session.cookie_domain", "domain.com");

并将最后一行更改为

ini_set("session.cookie_domain", ".domain.com");

登录成功后,登录前请致电session_regenerate_id()以更改会话ID。正如php-sessions-across-sub-domains中jeroen所建议的那样,您还可以在session_start之前添加以下2行

$some_name = session_name("some_name");
session_set_cookie_params(0, '/', '.domain.com');

请注意,如果您要添加上面的2行,还需要在登录页面中添加它们。

作为最后一个注释,检查session_start之前是否有任何输出到浏览器,如果是您的会话设置将无效并且无效