日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > php >内容正文

php

PHP单点登录

發布時間:2024/4/14 php 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 PHP单点登录 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

2019獨角獸企業重金招聘Python工程師標準>>>

之前回答過同樣的問題,我重新拿出來再回答一遍。題主請看

首先提醒一下題主不要被新技術嚇到了,也不要去查什么SSO(Single Sign On,單點登錄),那樣只能增大你問題的復雜度和對這個問題的恐懼心理,其實真的沒那么難。

我來幫你拆解下問題,你說的Session多端登錄,其實可以拆解為Session共享+登錄,不是什么高級的東西,無非是需要的Session值在讓不同服務器不同域名的情況下都可以訪問,讓大家都讀取同一個Session值,重要的是同一個session_id()值。這樣的話,每臺(服務器/項目)讀取的都是同樣的數據,既然都是讀取同樣的數據(尤其讀取同樣的session_id()值),那么我們不就可以憑借此標識符讓不同用戶顯示不同的內容,多點登陸的問題不就解決了

(把問題簡化,登錄對于用戶看來是一個特別的過程,在我們開發者看來無非就是讓不同的人讀取到不同的數據而已,而我們只需要獲取那個登陸標識符即可)。

也就是說,session共享的關鍵技術點在于兩點:

1. 讓客戶端訪問同一個sessionId,
2. 讓所有域名對應的服務器訪問的Session的數據的位置必須一致

下面重點講講實現,Session共享相對于Cookie共享來說較為復雜,因為情況相對于比較多,大概有四種情況

同服務器同域名,同服務器不同域名,不同服務器同域名,不同服務器不同域名。

同服務器同域名(不同子域名)的實現:

實現比較簡單,直接找一份網上的demo(圖侵刪),直接按照以下的代碼實現即可。

同服務器不同域名的實現:

這種情況下,我們再次明確實現session共享的關鍵技術點,同一個sessionId同樣的數據源
不同域名的話就要先將cookie('PHPSESSID')跨域,然后通過這個sessionid值從MySQL數據庫或者Nosql中取得對應數據,這樣就實現了同服務器不同域名的session共享。
首先是cookie跨域:

然后是Redis數據共享,key就是session_id,值就是需要共享的數據,使用到的就是Redis的集群技術,實例過于復雜,感興趣的可以直接去文章查看:redis cluster 集群 安裝 配置 詳解

不同服務器同域名的實現:

此種情況與<同服務器不同域名的實現>差不多,但在此種情況下不需要考慮cookie跨域的問題了,那么著重實現數據共享即可,同上,key為sessio_id,值為具體的數據值,參考文章同上redis cluster 集群 安裝 配置 詳解。

不同服務器名不同域名的實現:

此種情況和<同服務器不同域名的實現>圖探訪,也是要實現兩個目標,同一個sessionId同樣的數據源。不同域名的話就要先將cookie('PHPSESSID')跨域,然后通過這個sessionid值從MySQL數據庫或者Nosql中取得對應數據,這樣就實現了同服務器不同域名的session共享。
首先是cookie跨域:

然后是Redis數據共享,key就是session_id,值就是需要共享的數據,使用到的就是Redis的集群技術,實例過于復雜,感興趣的可以直接去文章查看:redis cluster 集群 安裝 配置 詳解。

我們發現四種情況下的解決方式都差不多,第2種情況<同服務器不同域名的實現>和第四種情況<不同域名不同服務器的實現>更是基本一樣,其中的核心思想無非就是解決兩個根源問題,session_id大家需要獲取同一個,有一個共享的數據源需要給大家獲取。

搞明白了這兩點,Session共享的SSO也就水到渠成了。有疑惑可直接在評論區詢問,我會立即回答。

轉載于:https://my.oschina.net/yonghan/blog/791192

總結

以上是生活随笔為你收集整理的PHP单点登录的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。