使用php一小时后未设置会话不工作?

使用php一小时后未设置会话不工作?,php,Php,下面是我的php代码,如果用户不活动,则应在一小时后取消设置所有会话。但在几分钟不活动后,它是unsetallsession变量。应该是一个小时不活动 function timeout(){ if(session_id() == '') { session_start(); } global $loginUrl; $host = $_SERVER['HTTP_HOST']; $sessinTime = $_SESSION['timeou

下面是我的php代码,如果用户不活动,则应在一小时后取消设置所有会话。但在几分钟不活动后,它是
unset
all
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();
}

你能告诉我我的代码是对的还是错的吗?我怎样才能修好它?谢谢

您刚刚犯了一个小的分配错误:

$sessinTime = $_SESSION['timeout'] = time();
该行将重置初始时间,并应变为:

$sessinTime = $_SESSION['timeout'];

这张支票是不必要的,很可能会把事情弄糟。只需始终调用
session\u start()

使用
session\u destroy()
清除所有会话数据,或使用
$\u session['front\u username']=null清除特定会话数据key@fiction问题不在于
unset
。问题是在一小时不活动之前,
unset
session
变量。如果用户被传递了惰性/非活动时间,则必须是
unset
session变量。如果OP需要跟踪除用户登录之外的其他内容,该怎么办。。取消设置特定键是好的practise@DarkBee我不同意。session_destroy()如何“苛刻”?如果忘记取消设置特定变量,该怎么办?你试图记住你设置的每个会话变量,并手动将它们全部取消设置,这将为糟糕的事情留下一个巨大的窗口。@Mike你对OP的应用程序做出了危险的假设。他很可能需要其他会话数据来保持,因此,直到我们知道更多不稳定的特定变量是可以的。我们不能判断<代码> SeistOxDebug < /C>对我们现在的知识是否太苛刻,所以我们应该考虑它。你想说当用户登录<代码> $sSiimTime= $ySale[ [ TimeOut] ]=TIME()时,应该使用这条线吗?code>?@creativeartbd您应该知道该行的实际功能并相应地使用它。当用户登录时,您需要在该会话和函数中存储当前时间
timeout()
,您应该使用我发布的行。否则,您只需在会话中设置时间again@creativeartbd如果它仍然超时,请尝试查看do
ini\u集('session.gc\u maxlifest'60*60*2)启动会话时。2小时可能比大多数PHP安装默认配置的时间长,因此您可能需要覆盖它。我很确定Ubuntu的默认值是24分钟。哦,谢谢你。所以我应该使用这个
$sessiontime=$\u SESSION['timeout'只要不堆叠分配,除非你知道它实际上做什么。仅仅改变那一行实际上不会解决任何问题,它后面的那一行仍然没有逻辑。
$sessinTime = $_SESSION['timeout'];
$sessinTime = $_SESSION['timeout'] = time();
$session = isset($_SESSION['timeout']) ? $_SESSION['timeout'] : $sessinTime;
if($session + (60 * 60 * 2) < time()) {
if(session_id() == '') {
    session_start();
}