Heim >Backend-Entwicklung >PHP-Tutorial >Beispielcode-Analyse der PHP-Login-Timeout-Erkennungsfunktion

Beispielcode-Analyse der PHP-Login-Timeout-Erkennungsfunktion

黄舟
黄舟Original
2017-03-22 09:20:502235Durchsuche

In diesem Artikel werden hauptsächlich relevante Informationen zu detaillierten Beispielen für die Funktion zur Erkennung von PHP-Anmeldezeitüberschreitungen vorgestellt. Freunde, die sie benötigen, können sich auf

Ausführliche Erläuterungen zu Beispielen für die Funktion zur Erkennung von PHP-Anmeldezeitüberschreitungen

beziehen

Vorwort:

php-Login-Timeout-Problem Wenn der Benutzer die Seite eine bestimmte Zeit lang nicht bedient, wird er sich automatisch abmelden durch js! Der Code lautet wie folgt (am Beispiel der thinkphp5.0-Version)

1. Erstellen Sie den Anmeldebereich Controller:

<?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(&#39;ADMIN_ID&#39;,$result["id"]);//cookie缓存
   cookie(&#39;LOGIN_TIME&#39;,Request::instance()->time()+3600);//记录登录时间,并缓存1小时

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

}

2, erstellen Sie einen öffentlichen Controller (alle Controller, die eine Anmeldebestätigung erfordern erben diesen Controller)

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

3.js-Datei

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

Zum Schluss rufen Sie einfach die Appeal-JS-Datei auf allen Seiten auf. Es ist nicht nötig, sie auf der Anmeldeseite aufzurufen!

Das obige ist der detaillierte Inhalt vonBeispielcode-Analyse der PHP-Login-Timeout-Erkennungsfunktion. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn