CodeIgniter:将最后一个活动存储到数据库中

时间:2013-06-28 16:03:35

标签: php mysql database codeigniter session

我在数据库中创建了两个表,一个用户,另一个用会话。我认为将最后一个活动存储到会话中没有任何问题,但后来我发现会话正在删除,而且我不知何故无法存储最后一个活动。因为我想将最后一个活动存储在某个地方,我需要一个解决方案,如何在大约五分钟内将其保存到用户表中 - 就像CodeIgniter更改它的会话数据一样。

那么,该怎么做?

1 个答案:

答案 0 :(得分:7)

忘记会话表,只需更新每个请求的users表。我会在你的基本控制器的构造函数中这样做,所以它会自动运行(如果你不熟悉的话,请参阅MY_Controller examples)。像这样:

class MY_Controller extends CI_Controller {

    public function __construct()
    {
        parent::__construct():
        // The session class is available now because
        // we called the parent constructor, where it is already loaded.

        // Get the current logged in user (however your app does it)
        $user_id = $this->session->userdata('user_id');

        // You might want to validate that the user exists here

        // If you only want to update in intervals, check the last_activity.
        // You may need to load the date helper, or simply use time() instead.
        $time_since = now() - $this->session->userdata('last_activity');
        $interval = 300;

        // Do nothing if last activity is recent
        if ($time_since < $interval) return;

        // Update database
        $updated = $this->db
              ->set('last_activity', now())
              ->where('id', $user_id)
              ->update('users');

        // Log errors if you please
        $updated or log_message('error', 'Failed to update last activity.');
    }

}

要使用此基本控制器,您将使用其他控制器进行扩展。例如:

class SomeController extends MY_Controller {

    // MY_Controller constructor runs automatically

    function index()
    {
        // your code
    }

}

您可以在最初提取登录用户用户的位置执行此操作。