php 實現同一個帳號同時只能一個人登入

來源:互聯網
上載者:User

php 實現同一個帳號同時只能一個人登入

有點類似QQ,二台電腦登入,一台會把另一台擠掉線,並提示其他地點登入資訊。

php 實現同一個帳號同時只能一個人登入方法一

一,實現原理

1,使用者在電腦A登入,session資訊存放在redis當中,並將session_id存到mysql資料庫中。

2,同一使用者在電腦B登入,驗證完使用者名稱和密碼後,將該使用者資訊從資料庫讀出,取得使用者在電腦A登入的session_id,然後在到redis中驗證session是否到期。

3,如果到期,不用openfire推送提示資訊。如果沒有到期,php利用openfire推送訊息後,在將redis中使用者在電腦A中登入的session刪除掉,刪除後,在將使用者在電腦B登入的個人資訊放到session中,並將電腦B登入的session_id更新到資料庫中,在這裡一定要先發送推送,然後在清空session,不然使用者在電腦A收不到xmpp發過來的訊息。

注意:

openfire是java cms的一種,自身有資料庫,您建立的使用者表根openfire內建的使用者表之間要建立某種聯絡(如:手機號,郵箱等),方便資訊推送。

同一session_id肯定是在相同媒介上登入的,這個時候,也不用更新資料庫和推送訊息

下面簡單說一下安裝過程,以及要注意的地方。

二,安裝所用到的工具

# yum install php php-fpm nginx mysql mysql-server redis php-redis php-devel php-pdo php-mysql

修改session儲存方式:

# vim /etc/php-fpm.d/www.conf   ;php_value[session.save_handler] = files   //注釋掉舊的;php_value[session.save_path] = /var/lib/php/sessionphp_value[session.save_handler] = redis  //添加以下內容php_value[session.save_path] = "tcp://127.0.0.1:6379"

啟動服務後,如果以下內容說明,session存redis成功了

redis telnet查看session

openfire下載地址:http://www.igniterealtime.org/downloads/

# rpm -ivh ./*.rpm   //下載的是rpm安裝包

openfire啟動後,然後訪問http://ip:9090,一步一步配置就成了,有一點要注意就是資料庫的編碼。

php 實現同一個帳號同時只能一個人登入方法二

首先有幾點區別:
1、不緩衝session到nosql中
2、不儲存session_id到mysql中
實現邏輯:
1、比如帳號是admin,那麼表欄位login_count記入登入次數;
2、帳號登入後把login_count記入到session中;
3、在架構入口檔案或者許可權驗證處檢測session中的login_count與mysql中的login_count是否
相等,相等則是目前使用者,不相等則退出並且拋出異常(在此處判斷是否為ajax是ajax則發送json否則直接跳轉提示頁面);
應用情境:
假如A用戶端登入後session中的login_count為1,資料庫中的login_count也是1;
在B用戶端也登入了該帳號那麼則更新login_count為2,session中login_count也為2,相應的,A用戶端在實習邏輯第3點中的驗證規未通過則會退出,;
缺點:
即時監測mysql中login_count的變化會浪費mysql資源,可以把該欄位緩衝在檔案中或者nosql中,只要mysql該欄位有更新則一同更新緩衝中的login_count值;
最後:
這種實現方式為主動型:登入用戶端主動去監測自己是否被擠掉,而第一種實現方式是被動型:等待下一個用戶端擠掉自己;

  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.