所謂自動登錄就是當用戶第一次訪問網站時,輸入用戶名和密碼,而後勾選了自動登錄複選框,進入首頁後,點擊退出登錄,關閉網頁,再次打開一樣的網站,則無需再次輸入帳號密碼,直接進入首頁,這種交互方式就是「自動登陸」,這是很是好的用戶體驗,可是具體怎麼實現這些功能呢,下面給你們介紹一下個人理解和實現方式。前端
你們用過京東和淘寶的想必都知道,登錄京東後,發現帳戶信息已經顯示在首頁,能夠直接進行購物和付款,這種體驗就是咱們要追求的方式。數據庫
爲什麼瀏覽器打開,網站就會自動登錄呢,那說明打開網站的時候,瀏覽器向服務器端發送了一個憑證(Token也可叫鑰匙),告訴服務器,我是你的真實用戶,可放心開門,既然瀏覽器端須要提供憑證,那咱們確定會想到Cookie,只有Cookie才能在客戶端永久保存,客戶端從Cookie中提取信息後,服務器端識別後才能知道真僞,那說明服務器端是須要覈驗的。瀏覽器
到此,咱們的思路已經出來了,要實現自動登錄:安全
1.用戶登錄網站時,選擇「N周內免登陸」。服務器
2.用戶登錄成功後須要在瀏覽器端保存Cookie信息,同時服務器端數據庫中也須要記錄一樣的信息。cookie
3.當用戶訪問時,讀取客戶端中cookie信息,到服務器端數據庫進行覈驗,信息一致時直接獲取用戶信息保存session,跳轉到首頁。session
1.修改用戶名,這樣就能夠隨便用其餘人的帳號登陸了;網站
2.修改cookie的有效期,這樣當別人拿到你的電腦的時候,即便已通過了cookie的有效期,仍然能夠登錄。ui
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 |