java操作cookie 實現兩周內自動登入

2021-08-25 12:07:21 字數 2094 閱讀 8561

一、什麼是使用者自動登入?

如果使用者經常訪問我們的**,假如每天都訪問一次,或者好幾次,那麼使用者每次都重複這些登入操作就會感到相當厭煩。通過一些簡單的技術手段,我們可以讓**「記住」那些在曾經登入過的使用者。當該使用者下次再來訪問的時候,**可以識別該使用者,並為其自動完成登入過程。

二、基本思路

作為**的編寫者,我們無從知道坐在電腦前的那個人是誰。我們能夠知道的是,訪問**的是哪一台電腦——這一點可以通過cookie實現。因此,對使用者的識別實際上就是對客戶端電腦的識別。

簡單的說,當使用者第一次登入**的時候,**向客戶端傳送乙個包含有使用者名稱的cookie。當使用者在之後的某個時候再次訪問,瀏覽器就會向**伺服器回送這個cookie,於是,我們可以從這個cookie中讀取到使用者名稱,然後呼叫登入的方法,從而實現自動為使用者登入。

三、防止欺騙

cookie只是乙個普通的文字檔案,那裡面包含的字串可以直接用記事本開啟並進行編輯。因此任何人在任何電腦上都可以偽造乙個包含有他人使用者名稱 的 cookie,從而實現對他人身份的冒用。要解決這個問題,就要在cookie中附加一項資訊,這個資訊需要具有以下特性:1、和該使用者一一對應;2、偽 造難度大。這些內容和使用者名稱一起,以cookie的形式傳送給使用者的瀏覽器。並且,伺服器必須能夠記住這項內容,以便使用者再次訪問的時候進行核對。

理論上,可以使用該使用者的密碼。密碼具備了前述的兩個特點。但是因為cookie本身未經加密,儲存於其中的密碼(應該加密)可以被任何人看到,因此這個方法極不安全。

另一種可以加以利用的資訊是使用者訪問時的session id。因為session id是乙個由系統隨機產生的、無規律的、長度較長的字串,因此它很難被偽造。要把它和使用者對應起來,我們需要在資料庫中新增乙個表,這個表至少有兩個字 段,乙個是使用者名稱,乙個是session id。當使用者首次登入的時候,我們把當前的session id和使用者名稱分別用cookie傳送給使用者,同時,把這兩項作為一條記錄插入資料庫。這樣,當使用者再次訪問的時候,伺服器就可以讀取客戶端發來的這兩個 cookie,並且用它們的值和資料庫中的記錄比對。如果在資料庫中找到了相應記錄,就說明這台電腦的確是該使用者上次登入時使用的電腦,進而可以為該使用者自動登入。

四、實現

1、在登入頁面中新增乙個核取方塊,讓使用者選擇是否願意在一定時間內實現自動登陸,例如兩周。

**:兩周內自動登入

2、在負責處理登入過程的servlet中,判斷使用者是否選擇了該核取方塊。如果是,則執行這兩個操作:向使用者傳送兩個cookie,以及向資料庫寫入一條相應的記錄。

**:cookie ckusername, cksessionid;

if (autologin.equals("on"))

3、實現自動登入。因為使用者下次訪問的時候,可能直接訪問**的任何頁面(例如通過收藏夾),而不一定是首頁或者登入頁面,所以我們需要用filter攔截到達該**的所有請求,並執行自動登入。

public void dofilter(servletrequest req, servletresponse resp, filterchain chain) throws servletexception, ioexception

// 如果user物件的username為"",表示使用者未登入。則執行自動登入過程。

// 否則不自動登入。

if (user.getusername().equals(""))

}chain.dofilter(req, resp);

}4、登出。只有當使用者在上次訪問時,未經登出就離開**,我們才能在該使用者下次訪問時執行自動登入。如果使用者顯式的執行了登出操作,那就表示該使用者 不希望我們記住他。我們需要在執行登出操作的servlet中,從資料庫中刪除相應記錄。這樣,下次使用者訪問的時候就不會執行自動登入了。

五、改進

使用者可能為了方便,自行修改cookie中的有效期,從而達到長期自動登入的目的。對某些存有敏感資訊的**來說,這樣做並不安全。當使用者長時間沒有使用他的電腦,或者將電腦遺棄、轉讓了,而儲存於其中的cookie仍然是有效的,這就為使用者和**帶來潛在的風險。

要解決這個問題,我們可以在資料庫中增加乙個字段,用以記錄自動登入的過期日。這樣,是否執行自動登入就不再以客戶端的cookie有效期為準,而 是以伺服器端資料庫中的資訊為準。當我們想要調整使用者自動登入的有效期的時候,只需要修改資料庫中相應的日期字段即可,因而這一過程變得更加安全。

java操作cookie 實現兩周內自動登入

一 什麼是使用者自動登入?如果使用者經常訪問我們的 假如每天都訪問一次,或者好幾次,那麼使用者每次都重複這些登入操作就會感到相當厭煩。通過一些簡單的技術手段,我們可以讓 記住 那些在曾經登入過的使用者。當該使用者下次再來訪問的時候,可以識別該使用者,並為其自動完成登入過程。二 基本思路 作為 的編寫...

Java操作Cookie講解

測試環境 jdk1.5 tomcat5.5 1.設定cookie 1cookie cookie new cookie key value 2cookie.setmaxage 60 設定60秒生存期,如果設定為負值的話,則為瀏覽器程序cookie 記憶體中儲存 關閉瀏覽器就失效。3cookie.set...

關於Java的Cookie操作

1.設定cookie cookie cookie new cookie key value cookie.setmaxage 60 設定60秒生存期,如果設定為負值的話,則為瀏覽器程序cookie 記憶體中儲存 關閉瀏覽器就失效。cookie.setpath test test2 設定cookie路...