php登錄超時(shí)檢測(cè)功能實(shí)例詳解
php登錄超時(shí)檢測(cè)功能實(shí)例詳解
前言:
php登錄超時(shí)問題,當(dāng)用戶超過一定時(shí)間沒有操作頁面時(shí)自動(dòng)退出登錄,原理是通過js進(jìn)行訪問判斷的!代碼如下(以thinkphp5.0版本為例)
1、創(chuàng)建登錄版塊控制器:
<?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();
//這里為登錄驗(yàn)證(自行補(bǔ)充)
.......
//通過登錄提交的信息獲取數(shù)據(jù)庫(kù)中的用戶,并記錄ID($id)
cookie('ADMIN_ID',$result["id"]);//cookie緩存
cookie('LOGIN_TIME',Request::instance()->time()+3600);//記錄登錄時(shí)間,并緩存1小時(shí)
}
return view();
}
// 檢測(cè)是否登錄超時(shí)(js調(diào)用,url為:http://您的域名/manage/main/loginLosetime)
public function loginLosetime(){
$logintime = cookie('LOGIN_TIME');
$time = request()->time();
if($time > $logintime){
return json(['code'=>1,'msg'=>'登錄超時(shí)!','url'=>url('main/login')]);
}else{
return json(['code'=>0]);
}
}
}
2、創(chuàng)建公共控制器(所有需要驗(yàn)證登錄的控制器都繼承該控制器)
<?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();//檢測(cè)登錄
$this->doAction();//記錄動(dòng)作
}
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');//獲取緩存登錄超時(shí)時(shí)間
$time = request()->time();//當(dāng)前時(shí)間
//判斷當(dāng)前時(shí)間是否大于緩存時(shí)間 或者 超時(shí)時(shí)間小于60秒后,自動(dòng)多加1個(gè)小時(shí)時(shí)間
if($time > $logintime || ($time - $logintime) < 60){
$newLogintime = $logintime + 3600;
cookie('LOGIN_TIME',$newLogintime);
}
}
}
3、js文件
$.ajaxSetup({
cache: false
});
$(function(){
setInterval(function() {
loginLosetime()
}, 360000);//設(shè)置1小時(shí)自動(dòng)執(zhí)行 loginLosetime 函數(shù)(時(shí)間可自行調(diào)整)
});
// 登錄超時(shí)檢測(cè)
function loginLosetime(){
$.get(AJAX_URL+'main/loginLosetime',function(res){
if(res.code == 1){
window.location.href = res.url;
}
});
}
最后在所有的頁面調(diào)用上訴js文件即可,登錄頁面可不用調(diào)用!
感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!
相關(guān)文章
PHP5中虛函數(shù)的實(shí)現(xiàn)方法分享
學(xué)過C++的人都應(yīng)該知道C++中有個(gè)虛函數(shù)的概念。而在php5中如何實(shí)現(xiàn)這個(gè)虛函數(shù)呢?2011-04-04
個(gè)人站長(zhǎng)制做網(wǎng)頁常用的php代碼
個(gè)人站長(zhǎng)制做網(wǎng)頁常用的php代碼...2007-03-03
php構(gòu)造函數(shù)與析構(gòu)函數(shù)
PHP析構(gòu)函數(shù)與構(gòu)造函數(shù)是相反的,它們被調(diào)用來一個(gè)對(duì)象從內(nèi)存中銷毀,幫助我們釋放對(duì)象屬性所占用的內(nèi)存并銷毀對(duì)象相關(guān)的資源。2016-04-04
PHP使用get_headers函數(shù)判斷遠(yuǎn)程文件是否存在的方法
這篇文章主要介紹了PHP使用get_headers函數(shù)判斷遠(yuǎn)程文件是否存在的方法,以實(shí)例形式分析了使用get_headers函數(shù)對(duì)遠(yuǎn)程文件是否存在進(jìn)行判斷的方法,以及針對(duì)重定向的排除方法,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2014-11-11
php實(shí)現(xiàn)通過soap調(diào)用.Net的WebService asmx文件
這篇文章主要介紹了php實(shí)現(xiàn)通過soap調(diào)用.Net的WebService asmx文件,結(jié)合實(shí)例形式分析了php使用soap實(shí)現(xiàn)WebService接口的調(diào)用技巧,需要的朋友可以參考下2017-02-02
PHP WebSocket的技術(shù)解析與使用指南詳解
在這篇文章中我們將深入討論從建立連接、綁定到監(jiān)聽等各方面的操作,并提供易于理解和實(shí)踐的指導(dǎo),希望可以幫助大家掌握在PHP中使用WebSocket的關(guān)鍵概念和技術(shù)2024-02-02
php網(wǎng)絡(luò)安全中命令執(zhí)行漏洞的產(chǎn)生及本質(zhì)探究
這篇文章主要介紹了php網(wǎng)絡(luò)安全中命令執(zhí)行漏洞的產(chǎn)生及本質(zhì),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧2023-02-02
用php或asp創(chuàng)建網(wǎng)頁桌面快捷方式的代碼
上傳到網(wǎng)站,shortcut.php 就會(huì)有提示下載一個(gè)名為 張楚網(wǎng)站.urll文件,保存在本地就是一個(gè)快捷方式!2010-03-03

