【发布时间】:2012-11-08 09:37:01
【问题描述】:
我的多域网站上的会话有问题。
事实上,我已经:
- www.website.com
和
- my-account.website.com
在 php.ini 中,我设置了:session.cookie_domain = ".website.com"
我检查它是否正确更改为 phpinfo(); 并且没关系,我对两个网站(域和子域)的值相同:
同一个
session.cookie_domain、session.save_path、session.cookie_path。session.cookie_lifetime= 0 和session.cookie_secure关闭
好吧,现在,当我尝试一些测试时:
- 在 www.website.com 上定义 session_name,启动会话,定义 un session 值,如
$_SESSION["test"] = "myvalue";,然后我显示 session_id。 - 转到 my-account.website.com 并打开具有相同会话名称的会话,我检查会话 ID 并发现与 www.website.com 相同的 ID,但我丢失了我定义的会话值. S_SESSION["test"] 丢失。
结论,会话 id 被保留,但会话值丢失。
有什么想法吗?我有检查更改session_set_cookie_params(0, '/', '.website.com');
在每个网站上。并尝试使用 htaccess php_value session.cookie_domain ".website.com"
帮帮忙,这让我发疯了。
【问题讨论】:
-
您的托管环境是否使用suhoshin patchset?它可用于使用它们来自的域(以及其他域)加密会话值,因此一个域无法读取其他域的 cookie。 (在共享主机中很有用)
-
我不在共享主机上,而是在 OVH 私人服务器上,Debian 6 和 Apache。但这很奇怪,因为我在 3 个月前处理过子域之间的共享会话并且效果很好,但是当我在 1 周前再次处理它时,没有任何效果:/ 重新启动和重新启动 apache 和服务器解决任何问题。
-
phpinfo()告诉你是否有 sushoshin,但如果我没记错的话,debian 上的默认 php 安装包括它。检查this answer它可能会有所帮助。 -
好的,我尝试在任何 .htaccess 上使用
php_value suhosin.session.cryptdocroot off关闭 sushoshin。 session_set_cookie_params(0, '/', '.website.com'); session_start();回声 session_id().'
';回声 $_SESSION["test"];我在 my-account.website.com 上定义了 TEST 我尝试在此处显示它。 Session_ID 相同,但 www.website.com 上的 TEST 丢失。 -
苏霍辛与此无关。如果是这样 - 您将不会获得与会话 cookie 中包含的唯一内容相同的会话 ID。你的 session.save_path 是什么?
标签: php session subdomain session-variables session-cookies