網站自動登陸功能的設計

我相信有不少IT者都會遇到公司要求網站能夠實現自動登陸,那什麼是自動登陸呢?

  所謂自動登錄就是當用戶第一次訪問網站時,輸入用戶名和密碼,而後勾選了自動登錄複選框,進入首頁後,點擊退出登錄,關閉網頁,再次打開一樣的網站,則無需再次輸入帳號密碼,直接進入首頁,這種交互方式就是「自動登陸」,這是很是好的用戶體驗,可是具體怎麼實現這些功能呢,下面給你們介紹一下個人理解和實現方式。前端

  你們用過京東和淘寶的想必都知道,登錄京東後,發現帳戶信息已經顯示在首頁,能夠直接進行購物和付款,這種體驗就是咱們要追求的方式。數據庫

 

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

到此,咱們的思路已經出來了,要實現自動登錄:安全

1.用戶登錄網站時,選擇「N周內免登陸」。服務器

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

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

 

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

既然是cookie實現,那麼cookie必定能夠被僞造的,因此上述的方案有如下安全隱患:

1.修改用戶名,這樣就能夠隨便用其餘人的帳號登陸了;網站

2.修改cookie的有效期,這樣當別人拿到你的電腦的時候,即便已通過了cookie的有效期,仍然能夠登錄。ui

既然咱們都知道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
相關文章
相關標籤/搜索