Maison > Article > développement back-end > Exemple d'analyse de code de la fonction de détection du délai de connexion PHP
Cet article présente principalement des informations pertinentes sur des exemples détaillés de fonction de détection du délai de connexion php. Les amis qui en ont besoin peuvent se référer à
Explication détaillée des exemples de fonction de détection du délai de connexion php
Avant-propos :
Problème de délai de connexion php, lorsque l'utilisateur n'utilise pas la page pendant un certain temps, il se déconnectera automatiquement. Le principe est de juger de l'accès. via js ! Le code est le suivant (en prenant la version thinkphp5.0 comme exemple)
1. Créer une section de connexion Contrôleur :
<?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, créez un contrôleur public (tous les contrôleurs qui nécessitent une vérification de connexion héritent de ce contrôleur)
<?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); } } }
fichier 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; } }); }
Enfin, appelez simplement le fichier js d'appel sur toutes les pages. Il n'est pas nécessaire de l'appeler sur la page de connexion !
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!