先說一下流程:
1. 保存用戶信息階段:
當 用戶登陸網站時,在登陸頁面填寫完用戶名和密碼后,如果用戶在提交時還選擇了“兩星期內自動登陸”復選框,那么在后台程序中驗證用戶名和密碼全都正確后,
還要為用戶保存這些信息,以便用戶下一次可以直接進入網站;如果用戶沒有勾選“兩星期內自動登陸”復選框,則不必為用戶保存信息,那么用戶在下一次登陸網 站時仍需要填寫用戶名和密碼。
在保存用戶信息階段,主要的工作是對用戶的信息進行加密並保存到客戶端。加密用戶的信息是較為繁瑣的,大致上可分為以下幾個步聚:
① 得到用戶名、經MD5加密后的用戶密碼、cookie有效時間(本文設置的是兩星期,可根據自己需要修改)
② 自定義的一個webKey,這個Key是我們為自己的網站定義的一個字符串常量,這個可根據自己需要隨意設置
③ 將上兩步得到的四個值得新連接成一個新的字符串,再進行MD5加密,這樣就得到了一個MD5明文字符串
④ 將用戶名、cookie有效時間、MD5明文字符串使用“:”間隔連接起來,再對這個連接后的新字符串進行Base64編碼
⑤ 設置一個cookieName,將cookieName和上一步產生的Base64編碼寫入到客戶端。
2. 讀取用戶信息:
其實弄明白了保存原理,讀取及校驗原理就很容易做了。讀取和檢驗可以分為下面幾個步驟:
① 根據設置的cookieName,得到cookieValue,如果值為空,就不幫用戶進行自動登陸;否則執行讀取方法
② 將cookieValue進行Base64解碼,將取得的字符串以split(“:”)進行拆分,得到一個String數組cookieValues(此操作與保存階段的第4步正好相反),這一步將得到三個值:
cookieValues[0] ---- 用戶名
cookieValues[1] ---- cookie有效時間
cookieValues[2] ---- MD5明文字符串
③ 判斷cookieValues的長度是否為3,如果不為3則進行錯誤處理。
④ 如果長度等於3,取出第二個,即cookieValues[1],此時將會得到有效時間(long型),將有效時間與服務器系統當前時間比較,如果小於當前時間,則說明cookie過期,進行錯誤處理。
⑤ 如果cookie沒有過期,就取cookieValues[0],這樣就可以得到用戶名了,然后去數據庫按用戶名查找用戶。
⑥ 如果上一步返回為空,進行錯誤處理。如果不為空,那么將會得到一個已經封裝好用戶信息的User實例對象user
⑦ 取出實例對象user的用戶名、密碼、cookie有效時間(即cookieValues[1])、webKey,然后將四個值連接起來,然后進行MD5加密,這樣做也會得到一個MD5明文字符串(此操作與保存階段的第3步類似)
⑧ 將上一步得到MD5明文與cookieValues[2]進行equals比較,如果是false,進行錯誤處理;如果是true,則將user對象添加到session中,幫助用戶完成自動登陸
轉自:
http://blog.csdn.net/blue_it/article/details/12151345