所以我开发了一个基本站点,使用$ _SESSION超全局变量进行登录。
所以代码基本上在检查登录详细信息后是有效的我将用户详细信息存储到会话中,如下所示:
注意我在存储这些值之前启动会话。
$_SESSION['myusername'] = $myusername;
$_SESSION['myuserid'] = $userid;
$_SESSION['logged_in'] = true;
$_SESSION['mystatus'] = $res['user_status'];
这一切都很好,在我制作网站和测试等的整个过程中。
现在突然间,会话无法正常工作,显然用户登录后无法访问,因为该站点正在检查会话中不存在的数据。
在页面上我存储了上面的数据,直到我可以使用它:
echo "username".$_SESSION['myusername'];
echo "status".$_SESSION['mystatus'];
及其那里。但是,当用户被定向到另一个页面并尝试:
<?php
session_start();
include ('functions.php');
echo "username".$_SESSION['myusername'];
echo "status".$_SESSION['mystatus']; ....
值不在会话中。我已经检查过会话ID是否相同,就是这样。
这一直有效,所以我真的很困惑。
有人请帮忙。修改
请求标题&amp;来自firebug的响应头(会话显示为空的页面)
Response Headersview source
Date Sat, 11 Jun 2011 15:18:48 GMT
Server Apache/2.2.3 (Red Hat)
X-Powered-By PHP/5.1.6
Expires Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma no-cache
Content-Length 3772
Connection close
Content-Type text/html; charset=UTF-8
Request Headersview source
Host students.ee.port.ac.uk
User-Agent Mozilla/5.0 (Windows; U; Windows NT 6.1; en-GB; rv:1.9.2.10) Gecko/20100914 Firefox/3.6.10
Accept text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language en-gb,en;q=0.5
Accept-Encoding gzip,deflate
Accept-Charset ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive 115
Connection keep-alive
Cookie PHPSESSID=1jqqa2oeivq76h2vhtk4uflkv1
Authorization Basic ZWNlNzAxNDE6cGllczRtZTIy
答案 0 :(得分:1)
所以看起来您在第二次请求时保持会话存在问题。
会话跟踪通过 cookies 完成,您应该检查(使用Live HTTP Headers或firebug)服务器发送的真实cookie内容。在此cookie中检查路径设置和给定的服务器名称,检查时间有效性设置,如果出现问题,浏览器将不会发回cookie,并且您将在每个请求上获得新会话。
Web开发者工具栏还包含一些不错的cookie工具,您可以在其中显示包含给定页面的所有Cookie详细信息的页面。如果cookie receveid不存在,则浏览器假定此cookie与此页面无关。大多数情况下,php设置会将cookie.domain设置强制为使用DNS以外的其他设置。
答案 1 :(得分:0)
检查第二个请求的会话ID是否与第一个请求的会话ID相同。
答案 2 :(得分:0)
鉴于您在过去几周内没有更改任何内容以及它曾经工作过,您应该检查您的服务器是否没有用完磁盘空间。如果是,它可能会创建对会话的引用,但可能无法在呈现页面后将数据序列化到磁盘。
这可以解释为什么输出$ _SESSION [...]在同一页面上工作以及为什么在响应中设置cookie。