php登录超时检测功能实例详解


Posted in PHP onMarch 21, 2017

php登录超时检测功能实例详解

前言:

php登录超时问题,当用户超过一定时间没有操作页面时自动退出登录,原理是通过js进行访问判断的!代码如下(以thinkphp5.0版本为例)

1、创建登录版块控制器:

<?php
namespace app\manage\control;
use \think\Controller;

class Main extends Controller{

 protected $request;

 public function _initialize(){
 $this->request = \think\Request::instance();
 }

 public function login(){
 if($this->request->method() == "POST"){
 $data = $this->request->param();
   //这里为登录验证(自行补充)
   .......
   //通过登录提交的信息获取数据库中的用户,并记录ID($id)
   cookie('ADMIN_ID',$result["id"]);//cookie缓存
   cookie('LOGIN_TIME',Request::instance()->time()+3600);//记录登录时间,并缓存1小时

 }
 return view();
 }
 
 // 检测是否登录超时(js调用,url为:http://您的域名/manage/main/loginLosetime)
 public function loginLosetime(){
 $logintime = cookie('LOGIN_TIME');
 $time = request()->time();
 if($time > $logintime){
 return json(['code'=>1,'msg'=>'登录超时!','url'=>url('main/login')]);
 }else{
 return json(['code'=>0]);
 }
 }

}

2、创建公共控制器(所有需要验证登录的控制器都继承该控制器)

<?php

namespace app\common\control;
use \think\Controller;
class AdminBase extends Controller{
 protected $request;
 public function _initialize(){
 parent::_initialize();
  $this->request = \think\Request::instance();
 $this->checkLogin();//检测登录
 $this->doAction();//记录动作
 }
 protected function checkLogin(){

 $cookie_admin_id = cookie('ADMIN_ID');
 if(!empty($cookie_admin_id)){
 //获取登录用户信息
   .......
 }else{
 if($this->request->isAjax()){
 return $this->error('您还没有登录!',url('main/login'));
 }else{
 header("Location:".url("main/login"));
 exit();
 }
 }
 }
 // 页面操作记录
 protected function doAction(){
 $logintime = cookie('LOGIN_TIME');//获取缓存登录超时时间
 $time = request()->time();//当前时间
  //判断当前时间是否大于缓存时间 或者 超时时间小于60秒后,自动多加1个小时时间
 if($time > $logintime || ($time - $logintime) < 60){
 $newLogintime = $logintime + 3600;
 cookie('LOGIN_TIME',$newLogintime);
 }
 }
}

3、js文件

$.ajaxSetup({
 cache: false
});
$(function(){
 setInterval(function() {
 loginLosetime()
 }, 360000);//设置1小时自动执行 loginLosetime 函数(时间可自行调整)
});
// 登录超时检测
function loginLosetime(){
 $.get(AJAX_URL+'main/loginLosetime',function(res){
 if(res.code == 1){
 window.location.href = res.url;
 }
 });
}

最后在所有的页面调用上诉js文件即可,登录页面可不用调用!

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

PHP 相关文章推荐
实用函数9
Nov 08 PHP
php 静态页面中显示动态内容
Aug 14 PHP
基于wordpress主题制作的具体实现步骤
May 10 PHP
关于PHP语言构造器介绍
Jul 08 PHP
php获取文件夹路径内的图片以及分页显示示例
Mar 11 PHP
PHP的引用详解
Feb 22 PHP
php文件上传你必须知道的几点
Oct 20 PHP
php mailer类调用远程SMTP服务器发送邮件实现方法
Mar 04 PHP
PHP SFTP实现上传下载功能
Jul 26 PHP
tp5(thinkPHP5框架)时间查询操作实例分析
May 29 PHP
php反射学习之不用new方法实例化类操作示例
Jun 14 PHP
php实现网页上一页下一页翻页过程详解
Jun 28 PHP
php base64 编码与解码实例代码
Mar 21 #PHP
详解PHP中的序列化、反序列化操作
Mar 21 #PHP
php实现文件管理与基础功能操作
Mar 21 #PHP
THINKPHP截取中文字符串函数实例代码
Mar 20 #PHP
PHP随机获取未被微信屏蔽的域名(微信域名检测)
Mar 19 #PHP
php中通过eval实现字符串格式的计算公式
Mar 18 #PHP
CodeIgniter框架验证码类库文件与用法示例
Mar 18 #PHP
You might like
PHP setcookie() cannot modify header information 的解决方法
2009/01/09 PHP
两个强悍的php 图像处理类1
2009/06/15 PHP
php上的memcache和memcached两个pecl库
2010/03/29 PHP
php读取mysql乱码,用set names XXX解决的原理分享
2011/12/29 PHP
php字符编码转换之gb2312转为utf8
2013/10/28 PHP
ThinkPHP中的create方法与自动令牌验证实例教程
2014/08/22 PHP
jQuery+JSON+jPlayer实现QQ空间音乐查询功能示例
2013/06/17 Javascript
jQuery封装的获取Url中的Get参数示例
2013/11/26 Javascript
js获取select选中的option的text示例代码
2013/12/19 Javascript
jquery attr方法获取input的checked属性问题
2014/05/26 Javascript
js取得html iframe中的元素和变量值
2014/06/30 Javascript
js使用DOM操作实现简单留言板的方法
2015/04/10 Javascript
图文详解Heap Sort堆排序算法及JavaScript的代码实现
2016/05/04 Javascript
jQuery 获取跨域XML(RSS)数据的相关总结分析
2016/05/18 Javascript
jquery根据一个值来选中select下的option实例代码
2016/08/29 Javascript
jQuery验证表单格式的使用方法
2017/01/10 Javascript
canvas绘制万花筒效果(代码分享)
2017/01/20 Javascript
Angular.JS实现无限级的联动菜单(使用demo)
2017/02/08 Javascript
轻松理解JavaScript之AJAX
2017/03/15 Javascript
vue-cli脚手架搭建的项目去除eslint验证的方法
2018/09/29 Javascript
javascript验证form表单数据的案例详解
2019/03/25 Javascript
js实现轮播图特效
2020/05/28 Javascript
基于Electron实现桌面应用开发代码实例
2020/07/07 Javascript
python3图片转换二进制存入mysql
2013/12/06 Python
Python调用ctypes使用C函数printf的方法
2017/08/23 Python
深入理解Django中内置的用户认证
2017/10/06 Python
Python 200行代码实现一个滑动验证码过程详解
2019/07/11 Python
Tensorflow实现多GPU并行方式
2020/02/03 Python
Omio波兰:全欧洲低价大巴、火车和航班搜索和比价
2018/02/16 全球购物
写演讲稿要注意的六件事
2014/01/14 职场文书
大学军训感言400字
2014/03/11 职场文书
2015年员工工作总结范文
2015/04/08 职场文书
2016年公司新年寄语
2015/08/17 职场文书
2019个人工作自我评价范文(3篇)
2019/09/19 职场文书
MySQL窗口函数的具体使用
2021/11/17 MySQL
Redis配置外网可访问(redis远程连接不上)的方法
2022/12/24 Redis