我正在为某人开发一个网站,用户可以将问题发布到网站上,公司的管理员可以查看问题并为其提供解决方案。我使用一个页面负责登录处理和一个mysql数据库。问题是我可以登录,它向我显示另一个面板(userpanel),但无论我点击什么其他按钮,它都会将我带回登录面板。 它曾经工作,因为我能够将数据发布到我的数据库。但是在我的网站上发生了一些变化后,它突然停止工作(我再也找不到问题了。)
当我登录时,$ _SESSION [“LoggedIn”]获取一个值并转到http post的同一页面上的另一个面板。当我点击那里的按钮时,似乎再次删除了$ _SESSION [“LoggedIn”],因为如果用户登录则用isset检查,否则它会显示用户面板。
//check user logged in
if (isset($_SESSION['LoggedIn'])) {
//Problem posted
if (isset($_POST["plaatsen"])) {
//Processing - plaatsen
postProblem();
}
} else {
//do login thing
}
我在这里附上了我的代码,希望有人能帮助我。
Index.php:http://pastebin.com/BZSirUTT
Functions.php:http://pastebin.com/7Hknhm9r
网站:http://php.olvgroeninge.be/~sac.26A-07/php/Oefeningen/Oefening3/index.php(它在荷兰语中)
答案 0 :(得分:4)
会话通常不会自行消失。如果他们这样做,假设您首先运行session_start()
,则可能是由于:
无法在服务器上保存会话;这可能是由于磁盘空间或权限问题。也可能是由于session_start()
语句之前的任何页面输出。幸运的是,您可以通过提高脚本开头的错误报告来看到这一点:
ini_set('display_errors', 'On');
error_reporting(-1);
无法找到会话;要使会话永久化,每次请求都需要会话ID。根据您的设置,这可能来自网址(PHPSESSID=xxx
)或Cookie。在后一种情况下,您可以通过添加浏览器开发人员工具来验证您的浏览器是否发送了cookie。
你自己毁掉了会话;调用session_unset
或session_destroy
将分别清除和删除会话。确保不会意外发生这种情况。
会话被垃圾收集;这通常仅在一段时间不活动后发生,使用相关的ini设置进行配置
无法读取会话;就像#1一样,但是阅读。
希望至少有一点可以帮助你。
您可以将以下代码添加到所有页面以隔离问题:
echo '<pre>', htmlspecialchars(print_r($_COOKIE, true)), '</pre>';
session_start();
echo '<pre>Session = ', session_id(), '</pre>';
<强>更新强>
问题是index.php
没有设置任何cookie; OP创建了一个单独的小测试页面,可以设置cookie。原来问题是#2然后:)