php session實(shí)現(xiàn)單點(diǎn)登錄單點(diǎn)登錄系統(tǒng)的分析與設(shè)計(jì)與分析(一)php session登錄
2022-02-13
概括:
本文主要介紹了一個(gè)通用的單點(diǎn)登錄系統(tǒng)的分析與設(shè)計(jì)。具體實(shí)現(xiàn)語言為PHP。單點(diǎn)登錄,英文名稱Sign On小程序開發(fā),縮寫為SSO,是企業(yè)和網(wǎng)絡(luò)服務(wù)綜合用戶處理的重要組成部分。SSO的定義是在多個(gè)應(yīng)用系統(tǒng)中,用戶只需要登錄一次,就可以訪問所有相互信任的應(yīng)用系統(tǒng)。
動(dòng)機(jī):
用過全站登錄方式的朋友應(yīng)該都知道,這是典型的觀察者模式方案。作為用戶中心,其財(cái)物的注冊和刪除在后臺統(tǒng)一進(jìn)行。并且每個(gè)子應(yīng)用站點(diǎn)對應(yīng)一個(gè)。用戶中心的每一次登錄動(dòng)作都會(huì)觸發(fā)js腳本回調(diào)w3c標(biāo)準(zhǔn)子站點(diǎn)登錄接口(api/uc.php)。
這種方式的缺點(diǎn),我覺得主要有兩點(diǎn): 1. 當(dāng)子站點(diǎn)過多時(shí),回調(diào)接口會(huì)相應(yīng)增加。這是由于分布式子站點(diǎn)數(shù)量的限制。如何控制登錄效率不會(huì)太低,不確定;2.當(dāng)某個(gè)變電站的回調(diào)接口出現(xiàn)問題時(shí),默認(rèn)登錄進(jìn)程會(huì)卡住(登錄程序的執(zhí)行時(shí)間可以限制,但是變電站后面的變電站回調(diào)接口對應(yīng)的問題將被調(diào)用。不再。
基于以上問題,在實(shí)際開發(fā)過程中,我設(shè)計(jì)了另一套單點(diǎn)登錄系統(tǒng)。
一. 登錄原理說明
單點(diǎn)登錄的技術(shù)實(shí)現(xiàn)機(jī)制:用戶第一次訪問應(yīng)用系統(tǒng)1時(shí),由于尚未登錄,會(huì)被引導(dǎo)到認(rèn)證系統(tǒng)登錄;認(rèn)證系統(tǒng)根據(jù)用戶提供的登錄信息進(jìn)行身份驗(yàn)證。為進(jìn)行驗(yàn)證,應(yīng)將身份驗(yàn)證憑據(jù)返回給用戶--;當(dāng)用戶訪問其他應(yīng)用程序時(shí),他們會(huì)將其作為自己的身份驗(yàn)證憑據(jù)。應(yīng)用系統(tǒng)接受請求后,將其發(fā)送給認(rèn)證系統(tǒng)進(jìn)行驗(yàn)證。檢查合法性。若驗(yàn)證通過網(wǎng)站制作,用戶無需重新登錄即可訪問應(yīng)用系統(tǒng)2和應(yīng)用系統(tǒng)3。
可見,要實(shí)現(xiàn)SSO,需要以下主要功能:
a) 所有應(yīng)用系統(tǒng)共享一個(gè)身份認(rèn)證系統(tǒng);
b) 所有應(yīng)用系統(tǒng)都可以識別和提取信息;
c) 應(yīng)用系統(tǒng)可以識別已登錄的用戶,并自動(dòng)判斷當(dāng)前用戶是否已登錄,從而完成單點(diǎn)登錄功能
基于以上基本原理,我設(shè)計(jì)了一套php語言的單點(diǎn)登錄系統(tǒng)程序,已投入官方生成服務(wù)器運(yùn)行。本系統(tǒng)程序以整個(gè)系統(tǒng)的唯一id為媒介,獲取當(dāng)前在線用戶的全站信息(登錄狀態(tài)信息等需要處理的全站信息)。
二. 進(jìn)程描述:
登錄流程:
1. 第一次登錄站點(diǎn):
a) 用戶輸入用戶名+密碼,向用戶驗(yàn)證中心發(fā)送登錄請求
b) 當(dāng)前登錄站點(diǎn),通過請求,用戶驗(yàn)證中心驗(yàn)證用戶名和密碼的合法性。如果驗(yàn)證通過,則生成識別當(dāng)前會(huì)話的用戶php session實(shí)現(xiàn)單點(diǎn)登錄,并將當(dāng)前登錄分站的站點(diǎn)標(biāo)識記錄到用戶中心,最后
c) 將獲取的用戶數(shù)據(jù)返回給子站。如果驗(yàn)證失敗,則返回相應(yīng)的錯(cuò)誤狀態(tài)碼。
d) 根據(jù)上一步請求返回的結(jié)果,當(dāng)前分站為用戶進(jìn)行登錄處理:如果狀態(tài)碼表示成功,則通過本站保存當(dāng)前站點(diǎn),本站記錄用戶登錄地位。如果狀態(tài)碼表示失敗,則會(huì)給用戶相應(yīng)的登錄失敗提示。
2. 在登錄狀態(tài)下,用戶轉(zhuǎn)到另一個(gè)子:
a) 通過本站或驗(yàn)證用戶登錄狀態(tài):如果驗(yàn)證通過,則進(jìn)入正常的站點(diǎn)處理程序;否則,用戶中心會(huì)驗(yàn)證用戶的登錄狀態(tài)(發(fā)送到用戶驗(yàn)證中心)php session實(shí)現(xiàn)單點(diǎn)登錄,如果驗(yàn)證通過,則處理返回的用戶信息。本地登錄處理,否則用戶未登錄。
注銷過程
a) 當(dāng)前登出站,清除用戶網(wǎng)站的登錄狀態(tài)和本地保存的用戶唯一隨機(jī)id
b) 通過接口清除全站記錄的全站唯一隨機(jī)id。界面返回,注銷其他注冊子站的密碼,本站輸出該密碼。
c) js代碼訪問對應(yīng)站W(wǎng)3C標(biāo)準(zhǔn)的登出腳本
三. 代碼說明:
本文涉及的相關(guān)代碼已打包上傳。有興趣的可以點(diǎn)擊文末下載鏈接下載。
1