我有一个域和子域名如下,
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
中,有时会话可以访问某些时间完全无法访问的网页(继续加载但几分钟没有结果)。
是否有人在同一问题上拥有相同的经验。
答案 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
);