POST后,SESSION会破坏

时间:2012-06-10 15:14:26

标签: php

我正在为某人开发一个网站,用户可以将问题发布到网站上,公司的管理员可以查看问题并为其提供解决方案。我使用一个页面负责登录处理和一个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(它在荷兰语中)

1 个答案:

答案 0 :(得分:4)

会话通常不会自行消失。如果他们这样做,假设您首先运行session_start(),则可能是由于:

  1. 无法在服务器上保存会话;这可能是由于磁盘空间或权限问题。也可能是由于session_start()语句之前的任何页面输出。幸运的是,您可以通过提高脚本开头的错误报告来看到这一点:

    ini_set('display_errors', 'On'); error_reporting(-1);

  2. 无法找到会话;要使会话永久化,每次请求都需要会话ID。根据您的设置,这可能来自网址(PHPSESSID=xxx)或Cookie。在后一种情况下,您可以通过添加浏览器开发人员工具来验证您的浏览器是否发送了cookie。

  3. 你自己毁掉了会话;调用session_unsetsession_destroy将分别清除和删除会话。确保不会意外发生这种情况。

  4. 会话被垃圾收集;这通常仅在一段时间不活动后发生,使用相关的ini设置进行配置

  5. 无法读取会话;就像#1一样,但是阅读。

  6. 希望至少有一点可以帮助你。


    调试会话

    您可以将以下代码添加到所有页面以隔离问题:

    echo '<pre>', htmlspecialchars(print_r($_COOKIE, true)), '</pre>';
    session_start();
    echo '<pre>Session = ', session_id(), '</pre>';
    

    <强>更新 问题是index.php没有设置任何cookie; OP创建了一个单独的小测试页面,可以设置cookie。原来问题是#2然后:)