zoukankan      html  css  js  c++  java
  • 使用 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');
  • 相关阅读:
    DNS解析原理图
    Linux 用户管理
    linux 磁盘基础知识学习
    python中readline判断文件读取结束的方法
    PLSQL Developer连接远程Oracle
    在Linux环境下的卸载Oracle11G操作
    MySQL INSERT插入条件判断:如果不存在则插入
    LoadRunner---杂问题&接口测试
    LoadRunner--获取请求的返回结果函数
    LoadRunner监控Linux条件和解决方法
  • 原文地址:https://www.cnblogs.com/tujia/p/6885100.html
Copyright © 2011-2022 走看看