古詩詞大全網 - 藝術簽名 - jsp如何實現自動登錄功能

jsp如何實現自動登錄功能

1.在登錄頁面中添加壹個復選框,以便用戶可以選擇是否要在某個時間段(如兩周)內自動登錄。

代碼:

& 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);

}