cookie實現自動登陸原理
阿新 • • 發佈:2019-02-17
現在很多網站都有為使用者儲存登陸資訊(即儲存Cookie)的功能,當用戶下一次進入網站時,可以幫助使用者自動登陸,使網站顯得更加友好。筆者通過研究ACEGI專案的自動登陸原始碼,編寫了一個安全有效的實現兩星期自動登陸功能的JAVA工具類,。下面是具體的實現流程和實現程式碼。
先說一下流程:
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中,幫助使用者完成自動登陸