PHP 会话未设置
Posted
技术标签:
【中文标题】PHP 会话未设置【英文标题】:PHP sessions getting unset 【发布时间】:2013-05-13 12:55:00 【问题描述】:我正在使用会话变量来存储登录数据。在本地,一切都很顺利,它可以很好地登录并且不会在页面之间注销。
但是当我将相同的文件放在服务器上时,由于某种原因我被注销了。我已经找到this 的帖子,并尝试使用以下代码来防止动态页面的缓存:
header("Cache-Control: no-cache, must-revalidate");
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); // Date in the past
虽然这似乎不起作用。这个问题还有其他可能的解决方案吗?
编辑:请注意,session_start()
在每一页上。
编辑 2: 我做了一些进一步的调查,当我在 mysite.com
上时,我的一些链接似乎链接到 www.mysite.com
。转到这个新页面会导致 $_SESSION[]
变量未设置,当使用后退按钮返回上一页时,您可以看到 $_SESSION[]
仍然设置。
【问题讨论】:
您是否在所有页面上都开始了会话 找到问题的根源:在页面中移动时调查请求/响应标头。如果会话正在消失,那么您会在那里看到它。 @ManishJangir:是的,每个页面都开始会话。 @SverriM.Olsen:我该怎么做? @arbitter:查看开发者工具的 Network 标签,它应该在那里。 【参考方案1】:会话使用 cookie,因此当您更改域(www.site.com 到 site.com)时,这些 cookie 不会被传输。
将您的网络服务器设置为拥有一个规范网址,并将所有人重定向到该网址(例如,在 site.com 上标准化,将 www.site.com 重定向到 site.com)。
这就是我在 apache 中处理重定向的方式:
ServerAlias www.site.com my.site.com site.net www.site.net sites.com www.sites.com site.com
RewriteEngine On
RewriteCond %SERVER_NAME !=site.com
RewriteRule ^(.*) https://site.com/$1 [R=301]
我更喜欢 site.com 而不是 www.site.com,除非你对他们两个做不同的事情,让人们输入额外的四个字符似乎毫无价值。我对 SEO 的(蹩脚)理解是,你最好选择一个,而不是在两个 url(site.com/stuff 和 www.site.com/stuff)上有重复的内容
【讨论】:
拥有 www.mysite.com 比 mysite.com 有什么优势吗?实现这一点的最简单方法是什么?以上是关于PHP 会话未设置的主要内容,如果未能解决你的问题,请参考以下文章
PhP 5.4 中的 PhP 上传进度不起作用。未设置会话变量