个人头像

柠檬酸

24小时前来过

控制台
欢迎来到我的博客!
默认封面

00:00/

播放列表

wordpress记录管理员几分钟前来过

发布于2017-05-21 / 289次浏览

效果图

首先感谢@路易新主题给的灵感。在他的代码基础上做了一点小小的改进,更准确的记录管理员最后操作的时间。

代码:

//管理员最近登录
add_action( 'wp_login', 'set_last_login' );
add_action( 'wp_logout', 'set_last_login_logout' );
function set_last_login() {
 $session_destroy=ini_get('session.gc_maxlifetime');
 update_user_meta( 1, 'last_login', time()+$session_destroy);
}
function set_last_logout() {
 update_user_meta( 1, 'last_login', time());
}
function last_login() {
 $time = get_user_meta( 1, 'last_login' )[0];
 if($time>time())
 $time=time();
 echo human_time_diff( $time );
}

原理?

先添加一个动作,分别在用户登陆和注销时执行函数。

这里分情况讨论:

如果管理员写完一篇日之后,点了注销。那么我们就直接触发set_last_login_login()函数,记录下注销的时间,然后通过wordpress自带的humen_time_diff()函数,直接就得到了管理员最后操作的时间。(当前时间-最后操作的时间)

第二种情况:如果管理员忘记点注销,而是直接关闭游览器怎么办?

假设用户在9点了注销,我们就在数据库里记录下了last_login的时间=9点整

用户在操作了15分钟后,直接关闭了浏览器(假设session没过期)。这时候,我们在9点30分去首页,会看到显示的是 ‘管理员在30分钟前过来’,但是管理员真正离开的时间是9点15,结果是不是就不准确了,少了15分钟呢?

所以我的想法是通过ini_get(‘session.gc_maxlifetime’)函数,返回服务器的session过期时间。在管理员登陆时,我们记录下当前时间+session过期时间。假设session过期时间是1440秒,也就是24分钟。那么管理员在登陆时,记录的最后登陆时间是9点24分。那么不管管理员有没有在这24分钟里在操作(注销不算),我们在9点-9点24分这个时间段内,返回的都是‘管理员在一分钟前来过’。如果我们在9点30分去访问,结果就是9点30分-9点24分=6分钟。 相比于之前,是不是优化了,也更准确呢?

当然,这种办法在理想情况下最多能优化一个session过期的时间(一般是24分钟)。如果还想更准确,你也可以通过你的办法记录管理员关闭窗口的时间点,或者离开页面的时间点。这里就不继续探讨了…

 

喜欢 0
TAGS:  暂无标签
本站文章除注明转载/出处外,均为本站原创或翻译。若要转载但请务必注明出处,尊重他人劳动成果。 转载请注明出处链接 : wordpress记录管理员几分钟前来过

暂无评论