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 相关文章推荐
php 防止单引号,双引号在接受页面转义
Jul 10 PHP
php 判断数组是几维数组
Mar 20 PHP
PHP时间格式控制符对照表分享
Jul 23 PHP
php生成随机密码自定义函数代码(简单快速)
May 10 PHP
PHP实现的蚂蚁爬杆路径算法代码
Dec 03 PHP
PHP中如何防止外部恶意提交调用ajax接口
Apr 11 PHP
深入理解PHP原理之执行周期分析
Jun 01 PHP
浅析Laravel5中队列的配置及使用
Aug 04 PHP
php中strlen和mb_strlen用法实例分析
Nov 12 PHP
利用PHPExcel实现Excel文件的写入和读取
Apr 26 PHP
Smarty模板配置实例简析
Jul 20 PHP
thinkphp3.2同时连接两个数据库的简单方法
Aug 13 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中将指针移动到数据集初始位置的实现代码[mysql_data_seek]
2012/11/01 PHP
php简单浏览目录内容的实现代码
2013/06/07 PHP
php文件系统处理方法小结
2016/05/23 PHP
PHP实现的用户注册表单验证功能简单示例
2019/02/25 PHP
js实现杯子倒水问题自动求解程序
2013/03/25 Javascript
jquery异步跨域访问代码
2013/06/28 Javascript
JavaScript实现点击按钮字体放大、缩小
2016/02/29 Javascript
Bootstrap字体图标无法正常显示的解决方法
2016/10/08 Javascript
浅谈jquery采用attr修改form表单enctype不起作用的问题
2016/11/25 Javascript
JS实现列表页面隔行变色效果
2017/03/25 Javascript
浅谈Angular路由守卫
2017/08/26 Javascript
angular2 ng2 @input和@output理解及示例
2017/10/10 Javascript
详解基于Vue2.0实现的移动端弹窗(Alert, Confirm, Toast)组件
2018/08/02 Javascript
在Angular中使用JWT认证方法示例
2018/09/10 Javascript
解决vue跨域axios异步通信问题
2019/04/17 Javascript
vue实现拖拽的简单案例 不超出可视区域
2019/07/25 Javascript
vue.js实现回到顶部动画效果
2019/07/31 Javascript
python服务器与android客户端socket通信实例
2014/11/12 Python
Python使用BeautifulSoup库解析HTML基本使用教程
2016/03/31 Python
Python基本语法之运算符功能与用法详解
2019/10/22 Python
pandas中遍历dataframe的每一个元素的实现
2019/10/23 Python
利用python 下载bilibili视频
2020/11/13 Python
Python 实现键盘鼠标按键模拟
2020/11/18 Python
Keras保存模型并载入模型继续训练的实现
2021/02/20 Python
html5教程画矩形代码分享
2013/12/04 HTML / CSS
美国牛仔品牌:True Religion
2018/11/16 全球购物
Nordgreen台湾官网:极简北欧设计手表
2019/08/21 全球购物
小学学习雷锋活动总结
2014/07/03 职场文书
中国梦演讲稿开场白
2014/08/28 职场文书
自我检讨报告
2015/01/28 职场文书
萤火虫之墓观后感
2015/06/05 职场文书
幼儿园中班班级总结
2015/08/10 职场文书
2016年公司新年寄语
2015/08/17 职场文书
2016年大学生实习单位评语
2015/12/01 职场文书
nginx 多个location转发任意请求或访问静态资源文件的实现
2021/03/31 Servers
python 经纬度求两点距离、三点面积操作
2021/06/03 Python