相同的多域会话,但会话值丢失

Posted

技术标签:

【中文标题】相同的多域会话,但会话值丢失【英文标题】:Same multi-domain session but session values lost 【发布时间】:2012-11-08 09:37:01 【问题描述】:

我的多域网站上的会话有问题。

事实上,我已经:

www.website.com

my-account.website.com

php.ini 中,我设置了:session.cookie_domain = ".website.com"

我检查它是否正确更改为 phpinfo(); 并且没关系,我对两个网站(域和子域)的值相同:

同一个session.cookie_domainsession.save_pathsession.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 是什么? 【参考方案1】:

搜索不成功后,我在我的 Debian 上重新安装了 apache2。问题已解决,会话值共享成功。

我认为我的 apache2 在 2 个月前被插件安装损坏了。

【讨论】:

以上是关于相同的多域会话,但会话值丢失的主要内容,如果未能解决你的问题,请参考以下文章

跨域请求,关于后端session会话丢失的解决办法

跨越请求,关于后端session会话丢失的解决办法(转载)

Django 会话意外丢失数据

php会话随机丢失,无法理解为啥

会话数据仅在 Chrome 中丢失

标头后PHP会话被破坏/丢失