会话数据在 Web 主机上变得混乱
Posted
技术标签:
【中文标题】会话数据在 Web 主机上变得混乱【英文标题】:Session data gets confused on web host 【发布时间】:2015-04-15 16:46:22 【问题描述】:搞砸了 = 我登录到我的帐户,如果我更改页面,我在数据库中的另一个随机帐户中(但不再是我的帐户)。这只发生在外部主机上,本地主机工作正常。
我在所有页面上都有session_start()
,并且我只在一个文件中设置了会话数据,一旦有人登录,该文件就不会包含在任何页面的任何位置。
我找到了this post 和this other post
在每一页都试过这个
header("Cache-Control: no-cache, must-revalidate");
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT");
我的 .htaccess 将 website.com 重定向到 www.website.com,因此 URL 是唯一的。
我检查了我的代码,并且在用户登录后我没有在任何地方更改会话数据,所以我不知道是什么导致了这个问题。
有什么想法吗?
【问题讨论】:
您是否确认这不是您链接到的第一个问题中的缓存问题? @CBroe 是的,我做到了。我检查了每个页面的 HTTP 标头,但没有一个被缓存。此外,如果重要的话:phpSESSID 保持不变。 您是否有权访问服务器上存储会话文件的临时目录? (假设使用了默认的 PHP 会话机制。)尝试观察创建了哪些文件、何时修改它们以及它们包含的内容可能会对此有所了解。 抱歉,我没有访问权限。我使用 hostgator,我只能访问我的 /home 文件夹。根据 php.ini 配置,会话保存在 /tmp 上。是的,它是默认的 PHP 会话......你认为我可以尝试使用另一个主机来查看问题是否仍然存在,一旦它在 localhost 上运行? “根据 php.ini 配置,会话保存在 /tmp” – 对于托管服务器的所有用户...?那可能就是那个时候的问题。尝试将session.save_path
配置值设置为用户目录中您具有写入权限的路径。 (如果您没有其他配置权限,可以使用ini_set
完成,但每次都必须在session_start
之前进行。)
【参考方案1】:
我比较了本地主机上的 php.ini 和主机上的那个,register_globals
在本地主机上是 Off
,但在服务器上是 On
。
所以我在服务器上禁用了register_globals
,它现在可以工作了。
谢谢。
【讨论】:
请不要说你的脚本还在使用session_register
...?
没有。 Hostgator在cpanel上有一个php.ini quickconfig,我激活了,但是register_globals
也被激活了,一旦没有人使用register_globals
,我就没有注意到它。
是的,但是register_globals=on
应该只能覆盖会话值,当session_register
用于将值保存到会话中时。以上是关于会话数据在 Web 主机上变得混乱的主要内容,如果未能解决你的问题,请参考以下文章