在用户登录后为会话设置超时


Setting a timeout for a session after a user has logged in

我有一个登录页面,如果用户在一定时间内处于非活动状态,则需要关闭该页面。我认为将会话变量设置为cookie是最好的方法(如果有更好的方法或我的方法错误,请告诉我)。问题是,在脚本运行之前,会话被破坏,cookie被取消设置。我应该把if语句移到页面底部吗?我是否需要if语句?我这样做对吗?提前谢谢。

<?php
    require("../includes/header.php");
    $expire = time() + 90;
    setcookie("User", $_SESSION["user"], $expire);
    setcookie("Image", $_SESSION["image"], $expire);
    setcookie("Program", $_SESSION["program"], $expire);
    setcookie("Email", $_SESSION["email"], $expire);
    setcookie("Role", $_SESSION["role"], $expire);
    if($expire){
        unset($_COOKIE["User"]);
        unset($_COOKIE["Image"]);
        unset($_COOKIE["Program"]);
        unset($_COOKIE["Email"]);
        unset($_COOKIE["Role"]);
        session_destroy();
        echo "Session has expired.";
    }
?> 
<body>
    <div id="page">
        <header>
            <div id="logo" class="logo_bg"></div>
            <div id="fsi_logo" class="logo_bg"></div>
        </header>
        <div id="main">
            <div id="instructor">
                <?php
                    echo "<img id=instructor_image src=" .$_COOKIE["Image"] .">";
                    echo "<h1>" .$_COOKIE["User"] ."</h1>";
                    echo "<span><p>" .$_COOKIE["Program"] ."</p> - <h2>" .$_COOKIE["Role"] ."</h2></span>";
                    echo "<a href=mailto:" .$_COOKIE["Email"] .">" .$_COOKIE["Email"] ."</a>";
                ?>
            </div>
<?php require("../includes/footer.html"); ?>

在您的示例中,if($expire)始终为true。如果将过期时间存储在会话中,则不必将其移动到页面底部。类似这样的东西:

if(!isset($_SESSION["expire"])) {
    $_SESSION["expire"] = time() + 90; // This would add 90 seconds though...
    // More set logic
} elseif($_SESSION["expire"] < time()) {
    // Unset logic
} else {
    // Refresh timer
}