本文實例講述了PHP實現用戶異地登錄提醒功能的方法。分享給大家供大家參考,具體如下:
對于安全性要求比較高的web網站,特別是后臺管理,有時候需要甄別自己的賬號是否被盜或者是否有另一個人此刻登陸了在進行后臺操作,這些都會很不安全,為了避免兩個人同時登錄同時操作,可以強制下線一個賬號。
通過IP判斷當然是不行的,因為IP是隨時會在某一個網段內變化的,但是有一個機制,恰巧可以解決這個,那就是session,只要使用同一個瀏覽器訪問網站,瀏覽器不關閉每個來訪者的session_id是不變的,這也正是解決這個問題需要的。
以TP框架搭建的網站后臺為例,思路如下:
(1)數據庫用戶表
在user表中,增加一個字段`session_id` varchar(32)
,用來存放登錄之后的session_id。
(2)用戶登錄
用戶登錄,就是正常的判斷賬號密碼以及驗證碼,當這些都驗證通過的時候,取出當前的session_id存入數據庫user表中。
M('user')->where(array('id'=>$_SESSION['uid']))->save(array('session_id'=>session_id()));
(3)解決異地登錄問題
對于后臺操作,為了便于驗證和操作安全,基本都會先創建一個基礎控制器BaseController,然后后臺的其他操作控制器都繼承這個基礎控制器。對于后臺的每一步操作之前,用戶狀態的檢測都放在BaseController控制器的初始化_initialize()
方法中。
現在在_initialize()
方法中,除了驗證用戶登錄狀態是否被鎖定等等,還要取出本地session_id和存放在user表中的session_id進行比對,如果對不上那么表名賬號在異地有登陸,這時候可以迫使強制下線,退回到登錄頁面。
$user = M('user')->where(array('id'=>$_SESSION['uid']))->find();
$session_id = session_id();
if($user['session_id'] != $session_id){
session_destroy();
$this->error('您的賬號在其他地方登錄,您已經被強制下線', U('login'));
}
當然也可以獲取到異地登陸的IP,給出提醒:

更多關于thinkPHP相關內容感興趣的讀者可查看本站專題:《ThinkPHP入門教程》、《thinkPHP模板操作技巧總結》、《ThinkPHP常用方法總結》、《codeigniter入門教程》、《CI(CodeIgniter)框架進階教程》、《Zend FrameWork框架入門教程》及《PHP模板技術總結》。
希望本文所述對大家基于ThinkPHP框架的PHP程序設計有所幫助。
您可能感興趣的文章:- easyswoole一鍵安裝腳本及寶塔安裝錯誤問題
- thinkphp框架類庫擴展操作示例
- PHP框架實現WebSocket在線聊天通訊系統
- thinkPHP框架樂觀鎖和悲觀鎖實例分析
- 淺談laravel框架與thinkPHP框架的區別
- 自制PHP框架之設計模式
- 自制PHP框架之模型與數據庫
- 自制PHP框架之路由與控制器
- 詳解PHP框架EasySwoole