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