2010-06-03 57 views
0

我有一个网站正在部署,而且我遇到了问题。我在我的客户端托管软件包的子目录中测试我的代码,一切都很顺利。不过,我已将文件夹/文件移至站点根目录,现在我间歇性地丢失了所有会话数据。间歇会话

我已经采取了与在Firefox LiveHeaders这些饼干的样子被设置:

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 

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

+0

那些会话正在工作,然后当它不工作? – VoteyDisciple 2010-06-03 12:33:39

+0

这两个人都在登录设置,并保留,直到我再次被锁定。 – YsoL8 2010-06-03 12:44:15

+0

这些不是被设置的cookie。这些是返回的。但是你需要看设置说明。 – 2010-06-03 12:49:00

回答

0

对于一个会话中工作,两个元素必须同时为工作:

首先,浏览器必须与每个请求发送相同PHPSESSID的cookie。会话ID将会从一个会话改变到另一个会话,所以如果你明天(或者今天晚些时候,或者在不同的浏览器等等)登录,你会得到与现在不同的ID,但是在一次会话中,ID应该不会改变。

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

第一个问题最容易测试。看看会话正在发送的cookie是什么,然后在会话停止后再次检查,看看PHPSESSID是否发生了变化。像这样的行为最可能的原因将是设置不当的本地计算机时钟,会话中的超时设置较差等等。

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

+0

即使在我被锁定之后,PHPSESSID似乎仍然存在。 (我希望我正确使用该工具) – YsoL8 2010-06-03 12:54:21

+0

对于第二个问题,我是否认为我将删除$ _session的所有引用并将它们替换为MySQL替代品? – YsoL8 2010-06-03 13:05:34

+0

没有。你可以使用'session_set_save_handler'函数告诉PHP如何以及在哪里保存会话信息。你可以在配置文件中执行一次(或者在脚本的开头)。该手册(在评论中)包括设置它的代码。 – VoteyDisciple 2010-06-03 13:24:27

0

一对夫妇的事情,我想起:

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

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