PHP實現使用者異地登入提醒功能的代碼分享

來源:互聯網
上載者:User
當我們的QQ在異地登入的時候會有訊息提醒,對於安全性要求比較高的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,給出提醒:

相關推薦:

利用IP定位限制網站後台帳號異地登入

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.