PHP中的会话值未到期

时间:2015-02-12 13:32:47

标签: php session unset

我已将两个会话变量设置为:

$_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文件。

2 个答案:

答案 0 :(得分:0)

我认为会话变量未设置存在问题。如果您打算刷新会话本身,可以使用session_destroy(),这将清除$_SESSION数组。否则,您可以使用unset()函数,如here所述。

  

注意:如果$ _SESSION(或PHP 4.0.6或更低的$ HTTP_SESSION_VARS)是   使用,使用unset()取消注册会话变量,即取消设置   ($ _SESSION [ 'varname的']);

或者更简单地说,您只需将其值设置为null0,就可以检查其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'])