如何在 CMS PHP 中自动注销非活动用户

Posted

技术标签:

【中文标题】如何在 CMS PHP 中自动注销非活动用户【英文标题】:How to automatically logout an inactive user in your CMS PHP 【发布时间】:2015-08-12 03:44:58 【问题描述】:

我正试图从我的 CMS 中强制注销非活动用户。超时值存储在我的数据库中名为 PREF_TIMEOUT 的值中。我借用了这段代码并稍作修改。代码似乎没有做任何事情。有谁知道这样做的更好方法,或者可以发现是什么破坏了它?

<?php
function init() 
    parent:: init();
    self::logoutInactiveUser();


$timeout = mysql_query("SELECT PREF_TIMEOUT FROM preferences WHERE PREF_ID = '1'");
$result = mysql_fetch_array($timeout);

function logoutInactiveUser() 
    $inactivityLimit = $timeout * 60; // Converted to seconds
    $sessionStart = Session::get('session_start_time');
    if (isset($sessionStart))
        $elapsed_time = time() - Session::get('session_start_time');
        if ($elapsed_time >= $inactivityLimit) 
            $member = Member::currentUser();
            if($member) $member->logOut();
            Session::clear_all();
            Director::redirect(Director::baseURL() . 'Security/login');
        
    
    Session::set('session_start_time', time());

?>

【问题讨论】:

【参考方案1】:

请参考我在链接中的回答:Logout an inactive user using PHP。

根据您当前的代码,问题在于您的查询 $timeout = mysql_query("SELECT PREF_TIMEOUT FROM preferences WHERE PREF_ID = '1'"); $result = mysql_fetch_array($timeout); 位于函数 logoutInactiveUser() 之外,因此变量 $timeout 将没有来自您的数据库的任何数据。将代码移到函数中应该会对您有所帮助。

【讨论】:

以上是关于如何在 CMS PHP 中自动注销非活动用户的主要内容,如果未能解决你的问题,请参考以下文章

如果用户在特定时间内不活动,如何使用 codeigniter 自动注销

当用户在页面 javascript 或 php 中不活动 3 分钟时自动注销

用户不活动注销 PHP

Laravel 不活动时间设置

如果不活动10分钟,我如何使用php上的会话注销用户[重复]

如何在 10 分钟不活动后使 PHP 会话过期? [复制]