我必须在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
在一段时间后发生了变化
答案 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()中必须有要更新的表的更新查询...