php實作帳號只能有一個人登入的方法:1、將session資訊存在redis中;2、將session_id存到mysql資料庫中;3、登入時,驗證完使用者名稱和密碼後,將此使用者資料從資料庫讀出,取得使用者的session_id,驗證session是否過期;4、若沒有過期,利用openfire推播訊息;5、將新的session_id更新到資料庫中。
本文操作環境: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成功了
redis telnet查看session
openfire下載位址:http://www.igniterealtime.org/downloads/
查看複製列印?
# rpm -ivh ./*.rpm //下载的是rpm安装包
openfire啟動後,然後訪問http://ip:9090,一步一步配置就成了,有一點要注意就是資料庫的編碼。
【推薦學習:《PHP影片教學》】
以上是php如何實現一個帳號只能有一個人登錄的詳細內容。更多資訊請關注PHP中文網其他相關文章!