代碼:
& ltinput type = " checkbox " name = " autolog in " & gt;兩周內自動登錄
2.在處理登錄過程的Servlet中,判斷用戶是否選中了該復選框。如果是,則執行這兩個操作:向用戶發送兩個Cookie,並向數據庫寫入相應的記錄。
代碼:
Cookie ckUsername,ckSessionid
if(autolog in . equals(" on "){
//如果用戶選擇“兩周內自動登錄”,將向用戶發送兩個cookie。
//壹個cookie記錄用戶名,另壹個記錄唯壹驗證碼。
//並將此驗證碼寫入數據庫,供用戶返回時查詢。(防止偽造cookie)
CK username = new Cookie(" autoLoginUser ",user . get username());// user是代表用戶的bean。
CK username . set maxage(60 * 60 * 24 * 14);//設置Cookie的有效期為14天。
RES . add cookie(CK username);
session id = session . getid();//獲取當前會話id
cksession id = new Cookie(" session id ",session id);
cksessionid . set maxage(60 * 60 * 24 * 14);
RES . add cookie(cksession id);
//在數據庫中插入相應的記錄。
usersessiondao . insertusersession(user,session id);
}
3.實現自動登錄。因為用戶下次訪問時,可能會直接訪問網站的任何頁面(比如通過收藏夾),而不壹定是主頁或登錄頁面,所以我們需要使用Filter攔截所有到達網站的請求,並進行自動登錄。
公共void doFilter(ServletRequest req,ServletResponse resp,FilterChain)引發ServletException,IOException {
http servlet request request =(http servlet request)req;
http session session = request . getsession(true);
字符串用戶名;
字符串sessionid//這個sessionid是用戶上次登錄時保存在用戶端的識別碼,用於用戶後續訪問的自動登錄。不是此次訪問的會話id。
cookie[]cookie;
CookieManager cm = new CookieManager();// CookieManager是壹個自定義類,用於從Cookie數組中查找並返回具有指定名稱的Cookie值。
布爾isAutoLogin
//如果會話中沒有用戶對象,請創建壹個。
User User =(User)session . get attribute(" User ");
if (user == null) {
User = new User();//此時用戶中的username屬性為“”,表示用戶沒有登錄。
}
//如果用戶對象的用戶名是“”,則表示用戶沒有登錄。執行自動登錄過程。
//否則,不自動登錄。
if (user.getUsername()。等於(" "){
//檢查用戶瀏覽器是否發送了上次登錄的用戶名和sessionid,
//如果是,則自動為用戶登錄。
cookie = request . get cookies();
username = cm . getcookievalue(cookies,“autoLoginUser”);
session id = cm . getcookievalue(cookie,“session id”);
isAutoLogin = usersessiondao . getautologinstate(用戶名,會話id);//如果在數據庫中找到了對應的記錄,則表示可以自動登錄。
if (isAutoLogin) {
user.setUsername(用戶名);
user . set nickname(dbutil . get nickname(username));
session.setAttribute("用戶",用戶);//將用戶bean添加到會話中。
}
}
chain.doFilter(req,resp);
}