一、什麼是使用者自動登入?
如果使用者經常訪問我們的**,假如每天都訪問一次,或者好幾次,那麼使用者每次都重複這些登入操作就會感到相當厭煩。通過一些簡單的技術手段,我們可以讓**「記住」那些在曾經登入過的使用者。當該使用者下次再來訪問的時候,**可以識別該使用者,並為其自動完成登入過程。
二、基本思路
作為**的編寫者,我們無從知道坐在電腦前的那個人是誰。我們能夠知道的是,訪問**的是哪一台電腦——這一點可以通過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有效期為準,而 是以伺服器端資料庫中的資訊為準。當我們想要調整使用者自動登入的有效期的時候,只需要修改資料庫中相應的日期字段即可,因而這一過程變得更加安全。
jsp通過Cookie實現自動登入
一 什麼是使用者自動登入?如果使用者經常訪問我們的 假如每天都訪問一次,或者好幾次,那麼使用者每次都重複這些登入操作就會感到相當厭煩。通過一些簡單的技術手段,我們可以讓 記住 那些在曾經登入過的使用者。當該使用者下次再來訪問的時候,可以識別該使用者,並為其自動完成登入過程。二 基本思路 作為 的編寫...
jsp如何實現單點登入
在做專案的過程中,我們經常會遇到這樣的情況,需要進行單點登入,也就是說使用者登入乙個系統的同時也登入到其他系統。這裡採用乙個例子說明如何實現單點登入 比方說,我乙個專案裡面 scott 要實現登入到這個專案的同時,登入到58同城。要實現登入倆個專案,肯定要有這倆個不同系統的使用者名稱跟密碼才能實現 ...
jsp實現頁面自動跳轉
1.2.response.setheader refresh 5 url 3.4.jsp實現頁面自動跳轉 對於 的使用者註冊模組考慮如下 當使用者註冊成功以後,把註冊資訊顯示給使用者,然後從這個頁面自動跳轉到登入頁面,要求在指定時間之內,並且,使用者可以看到倒計時的顯示效果,具體控制實現的方法如下 ...