我已将两个会话变量设置为:
$_SESSION['logged_in'] = 1;
$_SESSION['last_acted_on'] = time();
我正在尝试使用:
重置会话变量logged_in
的值
<?php
session_start();
if( isset($_SESSION['last_acted_on']) && (time() - $_SESSION['last_acted_on'] > 120) ){ //2mins
session_unset('last_acted_on'); // unset $_SESSION variable for the run-time
session_unset('logged_in');
session_unset();
unset($_SESSION['last_acted_on']);
unset($_SESSION['logged_in']);
session_destroy(); // destroy session data in storage
return;
}
else{
$_SESSION['last_acted_on'] = time();
}
?>
但没有效果,logged_in
保持为1.任何建议?
EDIT
:我已将代码更新为:
if( isset($_SESSION['last_acted_on']) && (time() - strtotime($_SESSION['last_acted_on']) > 120) ){ //2mins
unset($_SESSION['last_acted_on']); // unset $_SESSION variable for the run-time
unset($_SESSION['logged_in']);
session_unset();
session_destroy(); // destroy session data in storage
return;
}
$_SESSION['last_acted_on'] = time();
此外,当我刷新页面或在页面上来回导航时,会话值未设置。为什么在2分钟的时间后没有被取消?请注意,会话变量到期的页面刷新是调用unsetsession.php文件。
答案 0 :(得分:0)
我认为会话变量未设置存在问题。如果您打算刷新会话本身,可以使用session_destroy()
,这将清除$_SESSION
数组。否则,您可以使用unset()
函数,如here所述。
注意:如果$ _SESSION(或PHP 4.0.6或更低的$ HTTP_SESSION_VARS)是 使用,使用unset()取消注册会话变量,即取消设置 ($ _SESSION [ 'varname的']);
或者更简单地说,您只需将其值设置为null
或0
,就可以检查其empty
条件,如下所示:
<?php
session_start();
$session = &$_SESSION;
if( !empty($session['last_acted_on']) && (time() - $session['last_acted_on'] > 120) ){ //2mins
unset($session['last_acted_on']); // unset $_SESSION variable for the run-time
unset($session['logged_in']);
return;
}
else{
$session['last_acted_on'] = time();
}
答案 1 :(得分:0)
session_unset的错误用法。
void session_unset ( void )
您需要的是
unset($_SESSION['yourvalue'])