PHP会话在SSL /非SSL页面之间被擦除,即使在单独的选项卡中也是如此

时间:2011-02-08 23:34:31

标签: php session ssl

场景:我在我的网站http://domain.com/上,看到我需要调整的一些内容。我点击“管理此页面”链接在新标签页中打开,该标签会将我发送到https://domain.com/myadmin/并重新进行身份验证,导航到我网站的相应审核面板,执行我的工作,并且通常会将该标签打开

现在回到网站的非SSL版本,我点击其他页面等等,看到其他内容以适应,以及我是否回到旧的https://domain.com/myadmin/ tab ,或者打开另一个新的https://domain.com/myadmin/标签,突然我的旧会话消失了,我必须重新进行身份验证。

目前,我们的会话数据存储在Memcache中。我们启用SSL的节点是一台机器。我们的非SSL站点在十几个节点之间进行负载平衡。所有节点都通过NFS共享一个公共代码库,因此代码在所有节点上都是相同的,无论是否安全。

经过大量的潜伏和阅读后,我想知道它是否与php.ini的session.cookie_secure设置有关...但是由于我们强制每个人使用安全/ myadmin /面板重新进行身份验证,似乎安全会话正在消失。

我认为问题是解决SSL请求的节点的本地问题。如果我们打开一个选项卡到https://domain.com/myadmin/并登录,然后删除/ myadmin /路径,只需浏览整个网站https://domain.com/,我们的会话似乎永远不会消失。但是,只要我们点击浏览器中的链接强制我们访问网站的非安全版本,我们的安全会话就会失败。

2 个答案:

答案 0 :(得分:2)

  1. 更改其中一个会话密钥名称 (即PHPSESSID _SECUREPHPSESSIDS为了您的安全 连接),所以你不要覆盖 用户浏览器中的cookie。
  2. 检查您的路径设置 饼干,以确保它们涵盖 你想要的网站的一部分。
  3. 如果您不想要安全会话ID 对非安全可见 连接你可以设置安全 在cookie上标记所以它只是 转移到同一个域。

答案 1 :(得分:1)

这是正在发生的事情。

  1. 当用户访问没有可见Cookie的http网站时,会设置一个非安全的PHPSESSID Cookie
  2. 当用户访问管理网站时,会创建一个安全的PHPSESSID Cookie
  3. 当存在与正在设置的非安全cookie同名的安全cookie时,安全cookie将替换为非安全cookie
  4. 正如Yzmir所说,解决方案是将会话密钥名称更改为不同