【问题标题】:How to use php sessions in sub domains [duplicate]如何在子域中使用 php 会话 [重复]
【发布时间】:2014-07-02 11:24:57
【问题描述】:

我有一个域和子域,如下所示,

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

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

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


设置php.ini session.cookie_domain.domain-name.local

结果:

firefox- 工作 ie- 从子域访问会话时未加载 chrome - 不提供任何会话细节


从php代码中设置如下

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

结果:

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


该问题中建议的另一个 php 代码,

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

结果: 和第二个一样


任何帮助将不胜感激,因为我被困在这里很长时间了。


编辑:

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


编辑 2

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

有没有人在同一问题上有相同的经历。

【问题讨论】:

  • 请阅读EDIT 2,我也关注这个问题,但这里的问题不同,除了IE之外它都在工作。
  • 我在EDIT 2 中明确提到我正面临一些其他问题,这些问题在重复问题中没有解决。但这仍然被标记为重复,这是不可接受的。请重新考虑。

标签: php session subdomain


【解决方案1】:

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

session_regenerate_id(true);

【讨论】:

  • 可能在另一个域中,$_SESSION 现在为空。
  • session_regenerate_id(true); ini_set('session.cookie_domain', '.first-class-and-more.local'); session_start(); 我是这样用的,结果还是一样
  • 您应该在启动会话后重新生成会话 ID
  • 那么,Severity: Notice Message: A session had already been started - ignoring session_start(),但结果是一样的
【解决方案2】:

如果会话处理效果不佳,您可以通过 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
  );

【讨论】:

  • 我需要把这段代码放在哪里?
猜你喜欢
  • 2012-12-14
  • 2011-11-30
  • 2012-06-20
  • 2015-01-14
  • 2017-02-05
  • 1970-01-01
  • 1970-01-01
  • 2018-05-27
  • 1970-01-01
相关资源
最近更新 更多