首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >跨子域的PHP会话

跨子域的PHP会话
EN

Stack Overflow用户
提问于 2009-06-30 15:12:18
回答 17查看 92.5K关注 0票数 94

我正在尝试设置以下内容:

代码语言:javascript
复制
auth.example.com
sub1.example.com
sub2.example.com

如果用户访问sub1.example.comsub2.example.com,而他们没有登录,他们会被重定向到auth.example.com并可以登录。

sub1.example.comsub2.example.com是两个独立的应用程序,但使用相同的凭据。

我尝试在我的php.ini中设置以下内容:

代码语言:javascript
复制
session.cookie_domain = ".example.com"

但它似乎没有将信息从一个域传递到另一个域。

编辑

我尝试了以下几种方法:

sub1.example.com/test.php

代码语言:javascript
复制
session_set_cookie_params(0, '/', '.example.com');
session_start();
print session_id() . "<br>";
$_SESSION['Regsitered'] = 1;
echo '<a href="http://auth.example.com/test.php">Change Sites</a>'

auth.example.com/test.php

代码语言:javascript
复制
session_set_cookie_params(0, '/', '.example.com');
session_start();
print session_id() . "<br>";
$_SESSION['Checked'] = 1;
print_r($_SESSION);

会话it是完全相同的,但是当我转储$_SESSION变量时,它不会显示两个密钥,而只是显示我在每个域下设置的任何密钥。

EN

回答 17

Stack Overflow用户

发布于 2009-09-22 00:35:38

我不知道这个问题是否仍然存在,但我刚刚遇到了同样的问题,并在调用session_set_cookie_params()之前设置了一个会话名称来解决它

代码语言:javascript
复制
$some_name = session_name("some_name");
session_set_cookie_params(0, '/', '.example.com');
session_start();

我在php.ini中没有做任何更改,但现在一切正常。

票数 139
EN

Stack Overflow用户

发布于 2011-06-25 20:49:13

有一件事可以神秘地阻止会话数据在子域上被读取,尽管cookies被正确地设置为.example.com,这就是PHP Suhosin补丁。根据问题中的示例,您可以正确配置所有内容,但它可能无法正常工作。

关闭以下Suhosin会话设置,即可恢复业务:

代码语言:javascript
复制
suhosin.session.cryptua = Off 
suhosin.session.cryptdocroot = Off
票数 24
EN

Stack Overflow用户

发布于 2009-06-30 15:17:16

尝试使用:

代码语言:javascript
复制
session.cookie_domain = "example.com"

而不是:

代码语言:javascript
复制
session.cookie_domain = ".example.com"

请注意开头缺少的句号。

但是要小心使用它,因为并不是所有浏览器都支持它。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1064243

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档