隨著用戶不斷擴大的需求,更多的系統(tǒng)被建造起來。為了獲得更好的用戶體驗,需要實現(xiàn)用戶單點登錄。所謂單點登錄,就是用戶在一個系統(tǒng)上登錄后,其他系統(tǒng)就不需要重復(fù)登錄。單點的登錄的好處很明顯,提高了用戶體驗度。如何實現(xiàn)單點登錄,在這里我提供兩種解決方案:
1和bAB兩個站點,只要在A,B任何一個站點登錄后,兩個網(wǎng)站就都可以使用,不需要在另一個站點登錄了。而通過基于cookie的實現(xiàn)方式,前提是兩個系統(tǒng)共享一級域名,并且用戶要可以唯一標示。上面這兩個站點的一級域名是the;具體處理過程如下:當用戶在其中某一個站點登錄,就設(shè)置一個cookie信息,該cookie包含標識用戶ID,為了安全,還需要利用對該cookie的值加密。當用戶訪問其他網(wǎng)站的時候,首先判斷是否存在cookie,如果有的話,便解密該cookie,獲取用戶信息,設(shè)置用戶為登錄狀態(tài)。
下面是PHP示例代碼
functionlogin()//正常的登錄
{
');
}
funtionsign()
{
$sign=$_COOKIE['sign'];
if(!empty($sign))
{
$sign=decrypt($sign);
..........///登錄成功
}
}
這里需要注意的是:加解密一定需要做安全驗證。但是這個方法也不夠完美,兩個站點必須有相同一級域名;另外這種完全基于cookie的方式,安全性不夠高。
2.采用專門登錄系統(tǒng)。
所有的站點共享一個登錄系統(tǒng);當用戶在其中的一個站點登錄成功時,該系統(tǒng)調(diào)用其他站點的登錄接口,完成用戶在其他站點的登錄,同時設(shè)置相應(yīng)的登錄信息;或者在用戶登錄時,只在該系統(tǒng)保存用戶登錄信息,當用戶在其他站點登錄時,必須請求該系統(tǒng)接口,獲取用戶是否登錄的信息。前一種方式的缺點是:不管用戶有沒有使用其他站點,那些站點都需要保存用戶狀態(tài);后一種方式就把所有的壓力都轉(zhuǎn)移到登錄系統(tǒng)上面來。而如果要實現(xiàn)用戶退出的統(tǒng)一操作,就需要站點調(diào)用登錄系統(tǒng)的退出接口,然后登錄系統(tǒng)接口調(diào)用其他站點的退出接口;或者設(shè)置一個標記,如果這個標記不存在則標示用戶退出,此時只要把該標示清空即可,其他站點發(fā)現(xiàn)該標示不存在就知道用戶已經(jīng)退出系統(tǒng)。
這種處理方式需要在登錄系統(tǒng)和個站點之間規(guī)定登錄接口,和注銷接口。通過這些接口,個站點可以很方便的處理用戶登錄或退出:
functionlogin()
{
$info=callLoginServer();//訪問登錄服務(wù)器
if(!empty($info))//登錄成功了
}
//用戶沒有登錄,則在本系統(tǒng)中登錄并調(diào)用登錄服務(wù)器接口
functionloging()//本系統(tǒng)登錄
{
.....//登錄成功
callSeverLogin();//通知用戶登錄
}
上面只是簡單的邏輯結(jié)構(gòu),對于正式的系統(tǒng)需要做具體的處理。
如果大家還有更好的方法,歡迎一起討論!