2011-01-29 66 views
2

这是一个常见的php问题的变种,似乎违反解决方案(和常识):当用户在我的网站上的http和https之间切换时,php转储会话的内容。这将是很糟糕的,除了在域test.mysite.com下运行它时网站正常运行。这个问题只会在www.mydomain.com下运行,并且只在我们的新服务器上运行。代码在我的旧机器上工作得很好!Php会话在SSL上重置

这两台服务器都运行CentOS,Rackspace CloudServer上存在一个麻烦的问题。

有什么建议吗?

编辑

只是为了了解得更透彻些:会话实际上得到去一个安全的页面时清除。即使会话ID没有更改,我也无法返回到不安全的页面查看会话的原始内容。

+0

SSL版本是否实际在同一节点上运行?有可能将它们分开。 – Orbling 2011-01-29 01:03:27

+0

据我所知。 – Jitters 2011-01-30 18:02:43

+0

“会话实际上已被清除” - 我发现**非常不可能 - 你确定你不会丢失会话ID,或者你真的检查过序列化的数据文件/记录。 – symcbean 2011-01-31 14:19:31

回答

1

听起来像是你牺牲品可怕的php.ini文件的诅咒。一些Cookie参数设置不同。

我会确保开发和生产中的php.ini文件完全相同,您正在运行相同版本的PHP,理想情况下是相同的版本。


编辑:好吧,所以它不一定是在php.ini中的差异。

查看您用于Cookie的域。如果您在未明确设置域的情况下设置cookie,则它仅为当前域。

如果这是www.example.com,那么访问http://example.com/然后被重定向到https://www.example.com/的用户将丢失它们的COOKIES。

为什么?因为Cookie正在为确切的域设置,并且不会被浏览器发送到不同的主机名。

如果您在多个名称上运行站点,情况也是如此。请确保您只在上运行该网站,名称为。如果用户到达任何其他名称,则在设置任何cookie之前,将它们重定向为永久重定向到一个真实姓名。