如何在标题重定向后阻止PHP代码执行?

时间:2016-03-29 11:21:29

标签: php session

我已经编写了一段代码来确定用户是否已登录且其会话未超时。如果他们没有登录或者他们一直处于非活动状态,他们会被发送到logout.php页面,该页面会更新数据库并销毁会话,然后将它们反馈到登录页面。

我遇到的问题是,在页面的下方是用户提交表单时执行各种活动的代码。因为header()重定向实际上是页面上的第一个代码,我希望服务器从上到下完成代码,所以如果我在表单上点击提交并因为登出而退出当我重新登录我提交的更改时,我一直处于非活动状态。这不应该发生。

代码:

//check if the userID has been set (is set at login)
if(isset($_SESSION['userID'])){
    //some code here to get variables from the DB
    //then check that the last recorded activity was not more than x minutes ago
    if(time() - $_SESSION['lastActivity'] < 1800){
        //update the $_SESSION['lastActivity'] variable
    } else {
        header('Location: logout.php'); //inactive, send to logout page
    }
} else {
    header('Location: logout.php'); //not logged in, send to logout page
}

if(isset some post variable){
    //update database
}

如果我没有登录或者在30分钟内没有刷新页面,那么最后的if语句就不会运行,但确实如此。谁能帮助我解决原因,以及如何预防?我的意思是我知道我可以将整个后续代码包装在if(isset($ _ SESSION [&#39; userID&#39;])条件中,但这似乎很麻烦,肯定第一个代码块应该处理用户而不是正确登录?

提前致谢

2 个答案:

答案 0 :(得分:1)

你应该退出;在header();

之后的下一行

答案 1 :(得分:0)

header("Location: ...");只会将一个标题发送回客户端,告诉它要去哪里。它没有明确取消服务器上当前脚本的执行。

如果您不希望脚本继续播放,则应该在exit;之后始终header("Location: ...");

相关问题