间歇性会话

时间:2010-06-03 12:29:20

标签: php session

我有一个我正在部署的网站,我遇到了问题。我在我的客户托管包的子目录中测试我的代码,一切似乎都很好。但是我已经将文件夹/文件移动到站点根目录,现在我间歇性地丢失了所有会话数据。

我已经看过Firefox中的LiveHeaders并且正在设置这些cookie:

    Cookie: __utma=196298984.443251570.1275554915.1275554915.1275557276.2;
 __utmz=196298984.1275554915.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none);
 __utmb=196298984.188.10.1275557276; PHPSESSID=3f5a363de3b7ec6084c7fdf90bec78a8; 
__utmc=196298984 

    Cookie: __utma=196298984.443251570.1275554915.1275554915.1275557276.2; _utmz=196298984.1275554915.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); 
__utmb=196298984.189.10.1275557276; PHPSESSID=3f5a363de3b7ec6084c7fdf90bec78a8; 
__utmc=196298984

我绝不是标题专家,所以如果你需要其他信息,我应该能够得到它。

2 个答案:

答案 0 :(得分:0)

要使会话起作用,两个元素都必须正常工作:

首先,浏览器必须为每个请求发送相同的PHPSESSID cookie。会话ID将从一个会话更改为另一个会话,因此如果您明天(或今天晚些时候,或在其他浏览器中等等)登录,您将获得与现在不同的ID,但在单个会话期间ID应该不要改变。

其次,服务器必须能够在每次请求期间访问与该ID相关联的相同文件。默认情况下,PHP将该信息存储在/tmp/目录中。如果你有权访问,你甚至可以在那里逛一逛,看看有什么存储。

第一个问题最容易测试。查看会话工作时发送的cookie,然后在会话停止工作后再次检查并查看PHPSESSID是否已更改。造成这种行为的最可能原因是本地计算机时钟设置不当,会话超时设置不佳等等。

第二个问题有点棘手。如果您的浏览器正在为每个请求发送正确的cookie,但PHP无法使用有关该会话的信息访问该文件,则问题出在服务器上。您可以考虑将会话存储在数据库中(如果您正在使用其中一个),这可以通过PHP manual中的代码轻松完成。

答案 1 :(得分:0)

我想到了几件事:

1:确保如果您的会话是在www.abc.com上创建的,那么所有浏览都发生在该域上,如果某些页面被发送到abc.com而不是www.abc.com,这是可能会导致会话/ cookie问题。

2:还要确保session_start指令在所有页面之上可用。