網站自動登錄功能的設計


我相信有很多IT者都會遇到公司要求網站可以實現自動登錄,那什么是自動登錄呢?

  所謂自動登陸就是當用戶第一次訪問網站時,輸入用戶名和密碼,然后勾選了自動登陸復選框,進入首頁后,點擊退出登陸,關閉網頁,再次打開同樣的網站,則無需再次輸入賬號密碼,直接進入首頁,這種交互方式就是“自動登錄”,這是非常好的用戶體驗,但是具體怎么實現這些功能呢,下面給大家介紹一下我的理解和實現方式。

  大家用過京東和淘寶的想必都知道,登陸京東后,發現賬戶信息已經顯示在首頁,可以直接進行購物和付款,這種體驗就是我們要追求的方式。

 

為何瀏覽器打開,網站就會自動登陸呢,那說明打開網站的時候,瀏覽器向服務器端發送了一個憑證(Token也可叫鑰匙),告訴服務器,我是你的真實用戶,可放心開門,既然瀏覽器端需要提供憑證,那我們肯定會想到Cookie,只有Cookie才能在客戶端永久保存,客戶端從Cookie中提取信息后,服務器端識別后才能知道真偽,那說明服務器端是需要核驗的。

到此,我們的思路已經出來了,要實現自動登陸:

1.用戶登陸網站時,選擇“N周內免登錄”。

2.用戶登陸成功后需要在瀏覽器端保存Cookie信息,同時服務器端數據庫中也需要記錄同樣的信息。

3.當用戶訪問時,讀取客戶端中cookie信息,到服務器端數據庫進行核驗,信息一致時直接獲取用戶信息保存session,跳轉到首頁。

 

以上是我幫助大家分析的思路,那下面我們就會具體去講這些方案。

既然是cookie實現,那么cookie一定可以被偽造的,所以上述的方案有以下安全隱患:

1.修改用戶名,這樣就可以隨便用其他人的賬號登錄了;

2.修改cookie的有效期,這樣當別人拿到你的電腦的時候,即使已經過了cookie的有效期,仍然可以登陸。

既然我們都知道Cookie是有安全隱患的,但是我們不用又不行,因此,我們能做的就是降低風險:

1.通過將cookie中保存的信息進行加密處理,用戶登陸成功以后,將時間戳和隨機數合並通過MD5加密處理形成Token。

  String token = Utils.MD5(System.currentTimeMillis()+Math.Rand(0,9999999));

  當然,也可以通過用戶名+系統時間生產Token或者將sessionId加密生產Token也可以。

2.將用戶ID(uid或者userName)和有效時間(1個月)以及Token保存在cookie中,同時記錄到數據庫表中(Remember_Key)。

3.用戶訪問網站時,后台讀取Cookie,獲取uid和Token,去數據庫對比,如果都存在,且在有效期內,則通過uid直接獲取用戶信息並保存session,直接跳轉到首頁。

前端可對此進行處理,獲取到后台返回的數據后,展示用戶名以及頭像信息等。

4.后台需要做過濾器,過濾網站的所有頁面,每當打開頁面時,首先判斷是否登陸,如果已經登陸則跳過,如果未登陸,需要先讀取Cookie,判斷是否匹配,如果匹配則跳過登陸,直接獲取用戶信息,否則跳轉到登陸頁面。

后台表設計:

id user_id token expires_date create_time update_time
1 41000000 NGyuswVwxnXxz4BI1F1UyNoWWrxcuRiadPYpJcVTMN9DmDYrNvCEDdwMOS6o522JY8FPtQsLg 1456381021993 2016-02-25 2016-02-25


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM