【问题标题】:CodeIgniter: Looping through Users to Log-out Inactive Users Based on Session via CronCodeIgniter:循环用户以通过 Cron 基于会话注销非活动用户
【发布时间】:2019-12-17 14:09:16
【问题描述】:

我有一个 CodeIgniter 平台,由于不活动,我想每天通过 cron 注销用户

背景:

  • 我想通过 Cron 执行此操作,因为我假设如果它只是 AJAX 或 php,那么它可能无法正常工作,因为需要发出请求才能触发注销。
  • 我只想每天注销一次。
  • 我一直在修改 CodeIgniter 的会话方法,但我没有看到如何既可以循环访问用户,又可以根据会话数据定位他们。

下面有一些基本代码

$users_sql = "SELECT * FROM `users`";
$users_result = $this->db->query($users_sql)->result();      

foreach($users_result as $user){
    $this->session->set_userdata("user_id",$user->id); //set user id  
    $user_session_data = $this->session->userdata('last_activity'); // Do I need to have some kind of additional cookie here?
    // Check last session stuff and logout if either midnight and no activity
}

任何为我指明正确方向的帮助将不胜感激!

【问题讨论】:

  • 我可能在这里遗漏了一些东西,但是为什么在会话配置中设置标准会话过期 X 小时不是替代方法?它更干净更容易(只需更改一个配置参数)

标签: php codeigniter session cron


【解决方案1】:

我相信但尚未确认或测试您可以使用会话库方法gc($maxlifetime) 来实现您的目标。 CI 会话类的每个驱动程序都必须定义此方法,因此无论您使用的是文件、数据库还是任何其他风格都无关紧要。

“gc”代表垃圾收集器,它将删除所有早于当前时间减去 $maxlifetime 的会话数据。传递 $maxlifetime 值 0(零)应删除在当前 time() 之前创建的所有会话。

所以,创建一个简单的控制器来加载session 库并运行这行代码。

$this->session->gc(0);

为您处理所有必需的循环和其他业务。

【讨论】:

    猜你喜欢
    • 2022-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-18
    • 2014-08-04
    • 1970-01-01
    • 1970-01-01
    • 2011-10-09
    相关资源
    最近更新 更多