网站自动登录功能的设计
我相信有很多IT者都會(huì)遇到公司要求網(wǎng)站可以實(shí)現(xiàn)自動(dòng)登錄,那什么是自動(dòng)登錄呢?
所謂自動(dòng)登陸就是當(dāng)用戶第一次訪問(wèn)網(wǎng)站時(shí),輸入用戶名和密碼,然后勾選了自動(dòng)登陸復(fù)選框,進(jìn)入首頁(yè)后,點(diǎn)擊退出登陸,關(guān)閉網(wǎng)頁(yè),再次打開(kāi)同樣的網(wǎng)站,則無(wú)需再次輸入賬號(hào)密碼,直接進(jìn)入首頁(yè),這種交互方式就是“自動(dòng)登錄”,這是非常好的用戶體驗(yàn),但是具體怎么實(shí)現(xiàn)這些功能呢,下面給大家介紹一下我的理解和實(shí)現(xiàn)方式。
大家用過(guò)京東和淘寶的想必都知道,登陸京東后,發(fā)現(xiàn)賬戶信息已經(jīng)顯示在首頁(yè),可以直接進(jìn)行購(gòu)物和付款,這種體驗(yàn)就是我們要追求的方式。
?
為何瀏覽器打開(kāi),網(wǎng)站就會(huì)自動(dòng)登陸呢,那說(shuō)明打開(kāi)網(wǎng)站的時(shí)候,瀏覽器向服務(wù)器端發(fā)送了一個(gè)憑證(Token也可叫鑰匙),告訴服務(wù)器,我是你的真實(shí)用戶,可放心開(kāi)門(mén),既然瀏覽器端需要提供憑證,那我們肯定會(huì)想到Cookie,只有Cookie才能在客戶端永久保存,客戶端從Cookie中提取信息后,服務(wù)器端識(shí)別后才能知道真?zhèn)?#xff0c;那說(shuō)明服務(wù)器端是需要核驗(yàn)的。
到此,我們的思路已經(jīng)出來(lái)了,要實(shí)現(xiàn)自動(dòng)登陸:
1.用戶登陸網(wǎng)站時(shí),選擇“N周內(nèi)免登錄”。
2.用戶登陸成功后需要在瀏覽器端保存Cookie信息,同時(shí)服務(wù)器端數(shù)據(jù)庫(kù)中也需要記錄同樣的信息。
3.當(dāng)用戶訪問(wèn)時(shí),讀取客戶端中cookie信息,到服務(wù)器端數(shù)據(jù)庫(kù)進(jìn)行核驗(yàn),信息一致時(shí)直接獲取用戶信息保存session,跳轉(zhuǎn)到首頁(yè)。
?
以上是我?guī)椭蠹曳治龅乃悸?#xff0c;那下面我們就會(huì)具體去講這些方案。
既然是cookie實(shí)現(xiàn),那么cookie一定可以被偽造的,所以上述的方案有以下安全隱患:
1.修改用戶名,這樣就可以隨便用其他人的賬號(hào)登錄了;
2.修改cookie的有效期,這樣當(dāng)別人拿到你的電腦的時(shí)候,即使已經(jīng)過(guò)了cookie的有效期,仍然可以登陸。
既然我們都知道Cookie是有安全隱患的,但是我們不用又不行,因此,我們能做的就是降低風(fēng)險(xiǎn):
1.通過(guò)將cookie中保存的信息進(jìn)行加密處理,用戶登陸成功以后,將時(shí)間戳和隨機(jī)數(shù)合并通過(guò)MD5加密處理形成Token。
String token = Utils.MD5(System.currentTimeMillis()+Math.Rand(0,9999999));
當(dāng)然,也可以通過(guò)用戶名+系統(tǒng)時(shí)間生產(chǎn)Token或者將sessionId加密生產(chǎn)Token也可以。
2.將用戶ID(uid或者userName)和有效時(shí)間(1個(gè)月)以及Token保存在cookie中,同時(shí)記錄到數(shù)據(jù)庫(kù)表中(Remember_Key)。
3.用戶訪問(wèn)網(wǎng)站時(shí),后臺(tái)讀取Cookie,獲取uid和Token,去數(shù)據(jù)庫(kù)對(duì)比,如果都存在,且在有效期內(nèi),則通過(guò)uid直接獲取用戶信息并保存session,直接跳轉(zhuǎn)到首頁(yè)。
前端可對(duì)此進(jìn)行處理,獲取到后臺(tái)返回的數(shù)據(jù)后,展示用戶名以及頭像信息等。
4.后臺(tái)需要做過(guò)濾器,過(guò)濾網(wǎng)站的所有頁(yè)面,每當(dāng)打開(kāi)頁(yè)面時(shí),首先判斷是否登陸,如果已經(jīng)登陸則跳過(guò),如果未登陸,需要先讀取Cookie,判斷是否匹配,如果匹配則跳過(guò)登陸,直接獲取用戶信息,否則跳轉(zhuǎn)到登陸頁(yè)面。
后臺(tái)表設(shè)計(jì):
| id | user_id | token | expires_date | create_time | update_time |
| 1 | 41000000 | NGyuswVwxnXxz4BI1F1UyNoWWrxcuRiadPYpJcVTMN9DmDYrNvCEDdwMOS6o522JY8FPtQsLg | 1456381021993 | 2016-02-25 | 2016-02-25 |
轉(zhuǎn)載于:https://www.cnblogs.com/jinhengyu/p/10258094.html
總結(jié)
以上是生活随笔為你收集整理的网站自动登录功能的设计的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 为PHP设置服务器(Apache/Ngi
- 下一篇: 面试题 02.02. 返回倒数第 k 个