首頁 >後端開發 >PHP問題 >php如何實現一個帳號只能有一個人登錄

php如何實現一個帳號只能有一個人登錄

藏色散人
藏色散人原創
2021-03-12 10:55:032997瀏覽

php實作帳號只能有一個人登入的方法:1、將session資訊存在redis中;2、將session_id存到mysql資料庫中;3、登入時,驗證完使用者名稱和密碼後,將此使用者資料從資料庫讀出,取得使用者的session_id,驗證session是否過期;4、若沒有過期,利用openfire推播訊息;5、將新的session_id更新到資料庫中。

php如何實現一個帳號只能有一個人登錄

本文操作環境:windows7系統、PHP8版,DELL G3電腦

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

以前考慮過這個問題,今天實現了一下,挺快的,從研究到開發完成差不多4個小時。有點類似QQ,二台電腦登錄,一台會把另一台擠掉線,並提示其他地點登入資訊。

一,實作原理

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/session  
  
php_value[session.save_handler] = redis  //添加以下内容  
php_value[session.save_path] = "tcp://127.0.0.1:6379"

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

php如何實現一個帳號只能有一個人登錄

redis telnet查看session

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

查看複製列印?

# rpm -ivh ./*.rpm   //下载的是rpm安装包

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

【推薦學習:《PHP影片教學》】

以上是php如何實現一個帳號只能有一個人登錄的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn