PHP利用Cookie设置用户30分钟未操作自动退出功能


Posted in PHP onJuly 03, 2017

登陆控制器需要做的登陆成功把用户ID等信息存入cookie:

$this->systemSetKey(array(‘name‘=>$admin_info[‘admin_name‘], ‘id‘=>$admin_info[‘admin_id‘],‘gid‘=>$admin_info[‘admin_gid‘],‘sp‘=>$admin_info[‘admin_is_super‘]));//登陆成功之后做得事情

父类中的 systemSetKey 方法:

/**
   * 系统后台 会员登录后 将会员验证内容写入对应cookie中
   *
   * @param string $name 用户名
   * @param int $id 用户ID
   * @return bool 布尔类型的返回结果
   */
  protected final function systemSetKey($user){
    setNcCookie(‘sys_key‘,encrypt(serialize($user),MD5_KEY),3600,‘‘,null);//设置cookie 过期时间为30分钟。这边设置cookie框架有带自己加密规则,具体是否需要加密自己看着设置。
  }

父类控制器构造方法判断用户是否有登陆:

protected function __construct(){
    Language::read(‘common,layout‘);
    /**
     * 验证用户是否登录
     * $admin_info 管理员资料 name id
     */
    $this->admin_info = $this->systemLogin();//取得管理员的资料,之后的子类控制器继承构造方法
    if ($this->admin_info[‘id‘] != 1){
      // 验证权限
      $this->checkPermission();
    }
    //转码 防止GBK下用ajax调用时传汉字数据出现乱码
    if (($_GET[‘branch‘]!=‘‘ || $_GET[‘op‘]==‘ajax‘) && strtoupper(CHARSET) == ‘GBK‘){
      $_GET = Language::getGBK($_GET);
    }
  }
  /**
   * 系统后台登录验证
   *
   * @param
   * @return array 数组类型的返回结果
   */
  protected final function systemLogin(){
    //取得cookie内容,解密,和系统匹配
    $user = unserialize(decrypt(cookie(‘sys_key‘),MD5_KEY));//取cookie 里面储存的信息,现在使用的框架里面自定义了cookie的加密方式
    if (!key_exists(‘gid‘,(array)$user) || !isset($user[‘sp‘]) || (empty($user[‘name‘]) || empty($user[‘id‘]))){  //假如不存在说明用户没登陆或者用户长时间未操作cookie时间过期 跳到登陆页面去
      @header(‘Location: index.php?mod=login&action=login‘);exit;
    }else {
      $this->systemSetKey($user);//如果用户有登陆的话,每一个操作都会重写刷新cookie;
    }
    return $user;
  }

加密函数:

/**
 * 加密函数
 *
 * @param string $txt 需要加密的字符串
 * @param string $key 密钥
 * @return string 返回加密结果
 */
function encrypt($txt, $key = ‘‘){
  if (empty($txt)) return $txt;
  if (empty($key)) $key = md5(MD5_KEY);
  $chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_.";
  $ikey ="-x6g6ZWm2G9g_vr0Bo.pOq3kRIxsZ6rm";
  $nh1 = rand(0,64);
  $nh2 = rand(0,64);
  $nh3 = rand(0,64);
  $ch1 = $chars{$nh1};
  $ch2 = $chars{$nh2};
  $ch3 = $chars{$nh3};
  $nhnum = $nh1 + $nh2 + $nh3;
  $knum = 0;$i = 0;
  while(isset($key{$i})) $knum +=ord($key{$i++});
  $mdKey = substr(md5(md5(md5($key.$ch1).$ch2.$ikey).$ch3),$nhnum%8,$knum%8 + 16);
  $txt = base64_encode(time().‘_‘.$txt);
  $txt = str_replace(array(‘+‘,‘/‘,‘=‘),array(‘-‘,‘_‘,‘.‘),$txt);
  $tmp = ‘‘;
  $j=0;$k = 0;
  $tlen = strlen($txt);
  $klen = strlen($mdKey);
  for ($i=0; $i<$tlen; $i++) {
    $k = $k == $klen ? 0 : $k;
    $j = ($nhnum+strpos($chars,$txt{$i})+ord($mdKey{$k++}))%64;
    $tmp .= $chars{$j};
  }
  $tmplen = strlen($tmp);
  $tmp = substr_replace($tmp,$ch3,$nh2 % ++$tmplen,0);
  $tmp = substr_replace($tmp,$ch2,$nh1 % ++$tmplen,0);
  $tmp = substr_replace($tmp,$ch1,$knum % ++$tmplen,0);
  return $tmp;
}

  解密函数:

/**
 * 解密函数
 *
 * @param string $txt 需要解密的字符串
 * @param string $key 密匙
 * @return string 字符串类型的返回结果
 */
function decrypt($txt, $key = ‘‘, $ttl = 0){
  if (empty($txt)) return $txt;
  if (empty($key)) $key = md5(MD5_KEY);
  $chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_.";
  $ikey ="-x6g6ZWm2G9g_vr0Bo.pOq3kRIxsZ6rm";
  $knum = 0;$i = 0;
  $tlen = @strlen($txt);
  while(isset($key{$i})) $knum +=ord($key{$i++});
  $ch1 = @$txt{$knum % $tlen};
  $nh1 = strpos($chars,$ch1);
  $txt = @substr_replace($txt,‘‘,$knum % $tlen--,1);
  $ch2 = @$txt{$nh1 % $tlen};
  $nh2 = @strpos($chars,$ch2);
  $txt = @substr_replace($txt,‘‘,$nh1 % $tlen--,1);
  $ch3 = @$txt{$nh2 % $tlen};
  $nh3 = @strpos($chars,$ch3);
  $txt = @substr_replace($txt,‘‘,$nh2 % $tlen--,1);
  $nhnum = $nh1 + $nh2 + $nh3;
  $mdKey = substr(md5(md5(md5($key.$ch1).$ch2.$ikey).$ch3),$nhnum % 8,$knum % 8 + 16);
  $tmp = ‘‘;
  $j=0; $k = 0;
  $tlen = @strlen($txt);
  $klen = @strlen($mdKey);
  for ($i=0; $i<$tlen; $i++) {
    $k = $k == $klen ? 0 : $k;
    $j = strpos($chars,$txt{$i})-$nhnum - ord($mdKey{$k++});
    while ($j<0) $j+=64;
    $tmp .= $chars{$j};
  }
  $tmp = str_replace(array(‘-‘,‘_‘,‘.‘),array(‘+‘,‘/‘,‘=‘),$tmp);
  $tmp = trim(base64_decode($tmp));
  if (preg_match("/\d{10}_/s",substr($tmp,0,11))){
    if ($ttl > 0 && (time() - substr($tmp,0,11) > $ttl)){
      $tmp = null;
    }else{
      $tmp = substr($tmp,11);
    }
  }
  return $tmp;
}

以上所述是小编给大家介绍的PHP利用Cookie设置用户30分钟未操作自动退出功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

PHP 相关文章推荐
二十行语句实现从Excel到mysql的转化
Oct 09 PHP
特详细的PHPMYADMIN简明安装教程
Aug 01 PHP
php 数组的创建、调用和更新实现代码
Mar 09 PHP
php时间戳转换的示例
Mar 31 PHP
Thinkphp中import的几个用法详细介绍
Jul 02 PHP
php计算整个目录大小的方法
Jun 01 PHP
php类的定义与继承用法实例
Jul 07 PHP
PHP模板引擎Smarty内建函数foreach,foreachelse用法分析
Apr 11 PHP
Linux环境下php实现给网站截图的方法
May 03 PHP
Ajax提交表单时验证码自动验证 php后端验证码检测
Jul 20 PHP
针对多用户实现头像上传功能PHP代码 适用于登陆页面制作
Aug 17 PHP
laravel中的一些简单实用功能
Nov 03 PHP
PHP错误处理函数register_shutdown_function使用示例
Jul 03 #PHP
PHP使用preg_split和explode分割textarea存放内容的方法分析
Jul 03 #PHP
PHP简单获取上月、本月、近15天、近30天的方法示例
Jul 03 #PHP
thinkPHP多表查询及分页功能实现方法示例
Jul 03 #PHP
PHP+Ajax实现的无刷新分页功能详解【附demo源码下载】
Jul 03 #PHP
PHP 返回数组后处理方法(开户成功后弹窗提示)
Jul 03 #PHP
php获取文章内容第一张图片的方法示例
Jul 03 #PHP
You might like
Mysql的Root密码忘记,查看或修改的解决方法(图文介绍)
2013/06/14 PHP
CI框架中site_url()和base_url()的区别
2015/01/07 PHP
PHP结合Ueditor并修改图片上传路径
2016/10/16 PHP
php实现URL加密解密的方法
2016/11/17 PHP
php自定义时间转换函数示例
2016/12/07 PHP
php输出图像的方法实例分析
2017/02/16 PHP
PHP过滤器 filter_has_var() 函数用法实例分析
2020/04/23 PHP
Add a Picture to a Microsoft Word Document
2007/06/15 Javascript
JS去除字符串的空格增强版(可以去除中间的空格)
2009/08/26 Javascript
用json方式实现在 js 中建立一个map
2014/05/02 Javascript
基于jQuery实现文本框缩放以及上下移动功能
2014/11/24 Javascript
jQuery中extend函数的实现原理详解
2015/02/03 Javascript
JavaScript实现当网页加载完成后执行指定函数的方法
2015/03/21 Javascript
关于List.ToArray()方法的效率测试
2016/09/30 Javascript
JSON中key动态设置及JSON.parse和JSON.stringify()的区别
2016/12/29 Javascript
vue+mockjs模拟数据实现前后端分离开发的实例代码
2017/08/08 Javascript
angular4 JavaScript内存溢出问题
2018/03/06 Javascript
详解Vue文档中几个易忽视部分的剖析
2018/03/24 Javascript
vue 实现强制类型转换 数字类型转为字符串
2019/11/07 Javascript
VUE 单页面使用 echart 窗口变化时的用法
2020/07/30 Javascript
nginx配置域名后的二级目录访问不同项目的配置操作
2020/11/06 Javascript
python学习之面向对象【入门初级篇】
2017/01/21 Python
python正则表达式的使用
2017/06/12 Python
Python命令行参数解析工具 docopt 安装和应用过程详解
2019/09/26 Python
python中的测试框架
2020/11/13 Python
h5使用canvas画布实现手势解锁
2019/01/04 HTML / CSS
英国香水店:The Perfume Shop
2017/03/27 全球购物
Easy Spirit官网:美国休闲鞋履中的代表品牌
2019/04/12 全球购物
毕业典礼演讲稿
2014/05/13 职场文书
人代会标语
2014/06/30 职场文书
课内比教学心得体会
2014/09/09 职场文书
国际贸易实训报告
2014/11/05 职场文书
酒店员工辞职信范文
2015/02/28 职场文书
幼儿园大班个人总结
2015/02/28 职场文书
【海涛教你打DOTA】剑圣第一人称视角解说
2022/04/01 DOTA
手把手带你彻底卸载MySQL数据库
2022/06/14 MySQL