使用cookie實現自動登錄功能
1、Web程序中第一次登錄後,再次訪問同一個Web程序時就無需再次登錄,而是直接進入程序的主界面(僅限於本機)。實現這個功能關鍵就是服務端要識別客戶的身份。而用Cookie是最簡單的身從驗證。
如果用戶第一次登錄,可以將用戶名作爲Cookie寫到本地,代碼如下:
2、將用戶名以cookie的方式發送到客戶端,並且將用戶名以session屬性的方式保存到服務器端以保證安全性,最後處理JSESESSIONID使其持久化(以cookie的形式保存到客戶端)當第二次登錄時HTTP響應頭便會出現兩個ID但沒有影響,具體代碼如下:
/*
* 如果是第一次登錄,將用戶名和密碼作爲cookie寫到本地
*/
String name = request.getParameter("name");
String pwd = request.getParameter("password");
User user = new User();
String userInfo = user.toString();
if(null!=name && !"".equals(name)){
user.setName(name);
}
if(null!=pwd && !"".equals(pwd)){
user.setPassword(pwd);
}
Cookie cookie = new Cookie("user",userInfo);
cookie.setMaxAge(360*24*60);//設置一年有效期
cookie.setPath("/");//可在同一應用服務器內共享方法
response.addCookie(cookie);//放鬆到客戶段
//憑這個Cookie就自動登錄並不安全可以在服務端使用一個Session來管理用戶。
//當第一次登錄成功後,就創建一個Session,並將用戶的某些信息保存在Session
HttpSession session = request.getSession();
session.setAttribute("user", userInfo);
session.setMaxInactiveInterval(3600*2);//2小時
//但是當cookie關閉後,用於保存SessionID的JSESSIONID會消失(此時cookie並沒有過期) ,所以得將JSESESSION持久化
Cookie sessionId = new Cookie("JSESESSIONID",session.getId());
sessionId.setMaxAge(2*60);//設置兩小時
sessionId.setPath("/");
response.addCookie(sessionId);
//當用戶第二次登陸時,檢測這個cookie是否存在
Cookie[] cookies = request.getCookies();
for (Cookie cookie2 : cookies) {
//如果存在這個cookie進行頁面跳轉
if(cookie2.equals("user")){
if(session.getAttribute("user")!=null){
request.getRequestDispatcher("直接進入主頁面的url").forward(request, response);
break;
}else{
//跳轉到登錄頁面
}
}
}
//如果使用上面的代碼,即使瀏覽器關閉,在兩小時之內,Web程序仍然可以自動登錄。
//如果我們自已加一個JSESSIONID Cookie,在第一次訪問Web程序時,
//HTTP響應頭有兩個JSESSIONID,但由於這兩個JSESSIONID的值完全一樣,沒有任何影響
//如果在響應頭的Set-Cookie字段中有多個相同的Cookie,則按着path和name進行比較,如果這兩個值相同,
//則認爲是同一個Cookie,最後一個出現的Cookie將覆蓋前面相同的Cookie
以上內容引用自:https://www.cnblogs.com/zyb136/articles/7153117.html