1. 程式人生 > >cookie實現自動登陸原理

cookie實現自動登陸原理


現在很多網站都有為使用者儲存登陸資訊(即儲存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中,幫助使用者完成自動登陸