如何防止PHP代码在头重定向后执行?

如何防止PHP代码在头重定向后执行?,php,session,Php,Session,我已经编写了一段代码来确定用户是否登录并且他们的会话没有超时。如果未登录或处于非活动状态,则会将其发送到logout.php页面,该页面会更新数据库并销毁会话,然后将其返回登录页面 我遇到的问题是,在页面的下一步是当用户提交表单时执行各种活动的代码。由于header()重定向实际上是页面上的第一段代码,我希望服务器能够从头到尾地处理代码,因此,如果我在表单上点击submit并由于处于非活动状态而注销,那么当我重新登录时,我提交的更改就会发生,这让我有点吃惊。这不应该发生 代码: //检查用户ID

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

我遇到的问题是,在页面的下一步是当用户提交表单时执行各种活动的代码。由于header()重定向实际上是页面上的第一段代码,我希望服务器能够从头到尾地处理代码,因此,如果我在表单上点击submit并由于处于非活动状态而注销,那么当我重新登录时,我提交的更改就会发生,这让我有点吃惊。这不应该发生

代码:

//检查用户ID是否已设置(在登录时设置)
if(isset($\u会话['userID'])){
//这里有一些从数据库中获取变量的代码
//然后检查上次记录的活动是否不超过x分钟前
如果(时间()-$\会话['lastActivity']<1800){
//更新$\u会话['lastActivity']变量
}否则{
标题('Location:logout.php');//不活动,发送到注销页面
}
}否则{
header('Location:logout.php');//未登录,发送到注销页面
}
if(设置一些post变量){
//更新数据库
}
如果我没有登录或在超过30分钟内没有刷新页面,那么最后一个if语句不应该运行,但它确实运行了。有人能帮我解释为什么,以及如何预防吗?我的意思是,我知道我可以在if(isset($\u SESSION['userID'])条件下包装所有后续代码,但这似乎很麻烦,而且第一个代码块应该处理未正确登录的用户


提前感谢

您应该退出;在

标题后面的下一行(“位置:…”)只向客户端发送一个头,告诉它去哪里。它不会显式取消当前脚本在服务器上的执行


您应该始终有
退出标题(“位置:…”)后的code>如果您不希望脚本继续执行。

一如既往,有些事情非常简单。非常感谢。
//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
}