我有一个登录页面,如果用户在一定时间内处于非活动状态,则需要关闭该页面。我认为将会话变量设置为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
}