我正在我的localhost上开发一个网站,其中一切正常,但现在该网站已上传到我们 插入 ONLINE / inserted 服务器,$_SESSION
变量不会从login.php转移到index.php页面。两者都位于HTTPS上,该过程永远不会脱离HTTPS。正如我所说,我的本地主机上一切正常。
我的localhost的PHP是版本5.3.2,HTTPS服务器是5.2.6。我可以识别的关于会话的设置的唯一区别是session.use_only_cookies
在我的本地主机上是On
,在HTTPS服务器上是Off
。
有人可以说明为什么会话变量没有转移? PS。我在login.php和index.php中都有session_start();
。
提前致谢。
答案 0 :(得分:0)
您是否检查过会话cookie是否在HTTP和HTTPS请求之间转移?并且双方都存在相同的会话令牌?
如果通过HTTPS页面建立的cookie被标记为“仅安全”,它将不会被传输到非SSL页面,因此您将在非安全页面上获得一个全新的空会话,这将给出你是“缺少”会话变量的症状。他们并没有真正失踪,只是在其他一些现在没有活动的会议中。
答案 1 :(得分:0)
有些事情可能会出错。
确保通过https访问login.php和index.php。 session.cookie_secure
默认为关闭,但您永远不会知道。
同时确保他们都在同一个域中。 Cookie是按域设置的。
也许有一些古怪的cookie设置?您可以使用以下网址查看当前会话Cookie设置:session_get_cookie_params()
您还可以验证在浏览器中设置cookie的方式(如果有的话),对于Opera,您可以右键单击页面,选择“编辑站点首选项”,然后使用“Cookie”选项卡。从头脑中不了解其他浏览器...
另一种可能性是borked session.save_path
,运行session_save_path()
没有任何参数来获取当前的session_save_path,确保运行PHP的用户(通常但不一定是运行Web服务器的同一用户)可以写入这个目录。