如何在子域中使用php会话

时间:2014-05-14 11:58:28

标签: php session subdomain

我有一个域和子域名如下,

domain-name.local
sub.domain-name.local

我在domain-name.local有一个登录系统,我需要在访问sub.domain-name.local时使用相同的会话进行验证。

正如question中提到的那样,我尝试在子域中跟踪事情但没有成功,


将php.ini session.cookie_domain设为.domain-name.local

结果:

firefox - 工作 - 从子域访问会话时不加载 chrome - 不提供任何会话详情


从php代码设置为下面的

    ini_set('session.cookie_domain', '.domain-name.local');
    session_start();
    var_dump($_SESSION);

结果:

firefox - 不提供任何会话详情, - 从子域访问会话时未加载, chrome - 不提供任何会话详情


该问题中提出的另一个PHP代码,

    session_set_cookie_params(0, '/', '.domain-name.local');
    session_start();
    var_dump($_SESSION);

结果 与第二次相同


任何帮助都会受到欢迎,因为我已经在这里呆了很长时间。


编辑:

当我检查cookie时,我可以看到创建了两个PHPSESSID。我认为这是问题所在。我需要在main中使用相同的PHPSESSID


编辑2

当我从session.cookie_domain.domain-name.local设置php.ini.htaccess时,一切正常,除了IE(即10 / win 8) )。在IE中,有时会话可以访问某些时间完全无法访问的网页(继续加载但几分钟没有结果)。

是否有人在同一问题上拥有相同的经验。

2 个答案:

答案 0 :(得分:0)

您应该尝试重新生成会话ID:

session_regenerate_id(true);

答案 1 :(得分:0)

如果会话处理工作不顺利,你可以通过session_set_save_handler编写自己的工作(...)

但你需要这个

@setcookie(
   session_name(),
   session_id(),
   1400069742, // time + TTL
   '/',
   '.domain-name.local',
   false,
   false // use false if you need cookie accessable from javascript
  );