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 相关文章推荐
PHP配置文件中最常用四个ini函数
Mar 19 PHP
PHP memcache扩展的三种安装方法
Apr 26 PHP
PHP 配置文件中open_basedir选项作用
Jul 19 PHP
php Rename 更改文件、文件夹名称
May 24 PHP
php 文章调用类代码
Aug 11 PHP
基于php socket(fsockopen)的应用实例分析
Jun 02 PHP
php实现分页工具类分享
Jan 09 PHP
跟我学Laravel之请求(Request)的生命周期
Oct 15 PHP
PHP制作3D扇形统计图以及对图片进行缩放操作实例
Oct 23 PHP
php判断类是否存在函数class_exists用法分析
Nov 14 PHP
PHP的cURL库简介及使用示例
Feb 06 PHP
php中类和对象:静态属性、静态方法
Apr 09 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
PHP学习资料汇总与网址
2007/03/16 PHP
php连接oracle数据库及查询数据的方法
2014/12/29 PHP
php写app用的框架整理
2019/09/29 PHP
《JavaScript高级程序设计》阅读笔记(二) ECMAScript中的原始类型
2012/02/27 Javascript
javascript验证上传文件的类型限制必须为某些格式
2013/11/14 Javascript
jQuery插件jFade实现鼠标经过的图片高亮其它变暗
2015/03/14 Javascript
js实现点击文本框显示日期选择器特效代码分享
2020/05/21 Javascript
jQuery hover事件简单实现同时绑定2个方法
2016/06/07 Javascript
jQuery checkbox选中问题之prop与attr注意点分析
2016/11/15 Javascript
jQuery解析返回的xml和json方法详解
2017/01/05 Javascript
canvas绘制多边形
2017/02/24 Javascript
Sublime Text新建.vue模板并高亮(图文教程)
2017/10/26 Javascript
JavaScrip关于创建常量的知识点
2017/12/07 Javascript
Webpack path与publicPath的区别详解
2018/05/03 Javascript
Vue通过WebSocket建立长连接的实现代码
2019/11/05 Javascript
让你30分钟快速掌握vue3教程
2020/10/26 Javascript
[04:54]DOTA2 2017国际邀请赛:上届冠军WINGS采访短片
2017/08/09 DOTA
简单介绍利用TK在Python下进行GUI编程的教程
2015/04/13 Python
详解python之配置日志的几种方式
2017/05/22 Python
使用python实现knn算法
2017/12/20 Python
Python爬虫框架Scrapy基本用法入门教程
2018/07/26 Python
Pytorch GPU显存充足却显示out of memory的解决方式
2020/01/13 Python
python算的上脚本语言吗
2020/06/22 Python
什么是CSS3 HSLA色彩模式?HSLA模拟渐变色条
2016/04/26 HTML / CSS
中国梦主题教育活动总结
2014/05/05 职场文书
求职信怎么写
2014/05/23 职场文书
大学生上课迟到检讨书
2014/10/15 职场文书
办公室禁烟通知
2015/04/23 职场文书
项目战略合作意向书
2015/05/08 职场文书
考研英语辞职信
2015/05/13 职场文书
二审答辩状格式
2015/05/22 职场文书
学困生转化工作总结
2015/08/13 职场文书
2016年“世界气象日”广播稿
2015/12/17 职场文书
三严三实·严以修身心得体会
2016/01/15 职场文书
解决python绘图使用subplots出现标题重叠的问题
2021/04/30 Python
MySQL表锁、行锁、排它锁及共享锁的使用详解
2022/04/02 MySQL