在codeigniter中查找用户的总登录时间

时间:2014-01-07 04:59:27

标签: php codeigniter

我必须在codeigniter中准备用户登录和注销时间的报告。我已经覆盖了会话库,并根据它更改了set_userdata的功能。

我的问题是当用户没有选择退出按钮,或者他/她是否同时从多个系统登录时;在这种情况下,我如何记录登录和注销时间?

我将以下代码添加到会话库的session_destroy功能

$session_id=$this->userdata['session_id']; 
$c_array=array('logout_time'=>date('Y-m-d H:i:s')); 
$this->CI->db->where('session_id',$session_id); 
$this->CI->db->update('login_activities',$c_array);

session_id表格中的ci_session在一段时间后发生了变化

1 个答案:

答案 0 :(得分:0)

我们总是得不到注销时间,因为如果用户关闭浏览器就无法添加注销时间,在正常注销的情况下就可以了。

这里我的建议是:

而不是 logout_time 我们需要 current_time 使用字段

如果用户被记录,则每秒在页面上运行ajax或(可能在3秒或5秒内)

每次ajax运行时:current_time使用当前时间戳更新,并且必须使用以秒为单位的时间更新使用字段,可以通过login_time和当前时间的差异来计算

使用以下功能:

function getTimeInSec($t1, $t2)
{
    $timeFirst  = strtotime($t1);
    $timeSecond = strtotime($t2);
    $differenceInSeconds = $timeSecond - $timeFirst;
    return $differenceInSeconds;
}

这里$ t1是current_time,$ t2是login_time .... (两者的格式为'Y-m-d H:i:s')

ajax调用的

脚本:

<script>
jQuery(document).ready(function($){
    getRefresh(1000);
});
function getHeader()
{
     $.post("<?php echo site_url('mycontroller/refreshAjax');?>", {
 },
 function(response)
 {
 });
}
function getRefresh(tim)
{
    getHeader();
    setTimeout("getRefresh("+tim+")", tim);
}
</script>

在控制器函数refreshAjax()中必须有要更新的表的更新查询...