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

时间:2023-03-10 06:57:42
使用 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');