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中,幫助用戶完成自動登陸

轉自:

http://blog.csdn.net/blue_it/article/details/12151345

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章