以下是我的php代码,如果用户不活动,则在一小时后unset
全部为session
。但是在几分钟不活动之后,它unset
所有session
变量。它应该是一小时不活动。
function timeout(){
if(session_id() == '') {
session_start();
}
global $loginUrl;
$host = $_SERVER['HTTP_HOST'];
$sessinTime = $_SESSION['timeout'] = time();
$session = isset($_SESSION['timeout']) ? $_SESSION['timeout'] : $sessinTime;
if($session + (60 * 60 * 2) < time()) {
unset($_SESSION['front_username']);
unset($_SESSION['front_password']);
unset($_SESSION['user_id']);
unset($_SESSION['timeout']);
echo "<div class='error'>Session is expired. <a href='$loginUrl'>Login again.</a></div>";
//echo "<div class='error'>Session is expired. <a href='https://gc1-4.com/acc1/login.php'>Login again.</a></div>";
exit();
}
$_SESSION['timeout'] = time();
}
当用户登录时,我在time()
变量中注册session
。这是代码:
$_SESSION['front_username'] = $username;
$_SESSION['front_password'] = $password2;
$_SESSION['user_id'] = $userid;
$_SESSION['timeout'] = time();
你能告诉我我的代码是对还是错?我该如何解决?谢谢。
答案 0 :(得分:1)
你刚刚做了一个小作业错误:
$sessinTime = $_SESSION['timeout'] = time();
此行将重置初始时间,并应变为:
$sessinTime = $_SESSION['timeout'];
答案 1 :(得分:1)
$sessinTime = $_SESSION['timeout'] = time();
$session = isset($_SESSION['timeout']) ? $_SESSION['timeout'] : $sessinTime;
if($session + (60 * 60 * 2) < time()) {
所以嗯:
$_SESSION['timeout']
$session
。即使它是假的,它也会从前一行分配相同的值,因为$sessinTime
和$_SESSION['timeout']
会被复制到那里。现在,代码从不重置。您可能会看到其他内容,例如短会话cookie生命周期或其他地方的流氓代码会破坏会话。
此外,这部分构造相当危险:
if(session_id() == '') {
session_start();
}
检查是不必要的,可能会破坏可怕的事情。只需致电session_start()
。