使用 redis “捕捉” “用户登录过期” 事件

实现原理及步骤:

1)登录时,计算登录过期时间,以分钟为单位作key(例如:sign_timeout_201705212233),value方面自己发挥,需要什么数据就拼什么数据进去,只是要注意,一定要拼一个个过期时间进去,然后为了方便追加数据,value后台也可以直接拼一个逗号(例如:1495353081_1,),写一条记录到 redis。也就是同一天过期的用户信息记录到一条redis记录里(第二条开始用append追加,逗号分隔)。

$expires = time()+7*24*3600;
setcookie('_uid', 1, $expires);
setcookie('_uid_expires', $expires, $expires);

$YmdHi = date('YmdHi', $expires);
Helper_Redis::append('sign_timeout_'.$YmdHi, $expires.'_1,');

 

2)然后写一条计划任务,

每分钟查询一次redis记录(用当前时间,用上面的方法,拼接出 key),如果没记录就退出,

如果有记录,转回数组,

然后循环作相应处理就行了

require('./Helper_Redis.class.php');

$YmdHi        = date('YmdHi', time());
$redis_key    = 'sign_timeout_'.$YmdHi;
$list_str    = Helper_Redis::get($redis_key);

if(empty($list_str)) die('success');

$list_arr    = explode(',', $list_str);
array_pop($list_arr);

$now        = time();

$iData         = array();

foreach ($list_arr as $key=>$item) {
    $detail = explode('_', $item);
    
    // 需要处理的过期数据
    $iData[] = $detail;
}


// 处理写登出日志
// Helper_Userlogs::saveSignOut_all($iData);

Helper_Redis::delete($redis_key);

unset($list_arr, $iData);

die('success');

 

posted @ 2017-05-21 15:56  Tiac  阅读(1823)  评论(0编辑  收藏  举报