先普及下毫無關係的知識點:
1.cookie 被禁用後,用來表示唯一主機號的JSONID就無法獲取,而這個ID就是用來在服務器端區分用戶的session,所以session也無法使用
2.cookie是存在客戶端
Let‘s go
1.登錄頁面 (有攔截器,無法直接訪問,需要通過Controller跳轉)
<form action="loginAction" method="post">
用戶名:<input type="text" name="name" value="${name}"/><br>
密碼:<input type="password" name="password" value="${password}" /><br>
記住我<input type="checkbox" name="check" checked="checked"/><br>
<input type="submit" value="登錄">
</form>
2.顯示登錄頁面Controller
@RequestMapping("/login")
public String login(HttpServletRequest request,HttpServletResponse response,Model model){
Cookie[] cookies = request.getCookies();
for(Cookie cookie:cookies){
if ("name".equals(cookie.getName())) {
model.addAttribute("name",cookie.getValue());
}
if("password".equals(cookie.getName())){
model.addAttribute("password",cookie.getValue());
}
}
return "login";
}
3.登錄後,判斷當前登錄狀態,
如果是第一次訪問,判斷是否記住密碼
如果非第一次訪問,判斷是否繼續記住密碼
@RequestMapping("/loginAction")
@ResponseBody
public String loginAction(String name, String password, String check, HttpServletRequest request,HttpServletResponse response) throws IOException {
name = URLEncoder.encode(name, "UTF-8");
password=URLEncoder.encode(password,"UTF-8");
Cookie nameCookie=new Cookie("name",name);
Cookie passwordCookie=new Cookie("password",password);
//設置cookie路徑長短,決定了當前請求是否攜帶某個cookie
//如果請求發生在 http://localhost/ww/yy/zz
//那麼cookie默認路徑在/ww/yy
//此時發生訪問,request中會攜帶ww層以及yy層的cookie,不會攜帶別的層的cookie
//設置cookie路徑
nameCookie.setPath(request.getContextPath()+"/");
passwordCookie.setPath(request.getContextPath()+"/");
if("on".equals(check)){ //記住我
nameCookie.setMaxAge(60*60*24); //cookie在客戶端存活時間(s )
passwordCookie.setMaxAge(60*60*24);
}else {
nameCookie.setMaxAge(0); //cookie在客戶端存活時間(s )
passwordCookie.setMaxAge(0);
}
response.addCookie(nameCookie);
response.addCookie(passwordCookie);
return "<a href='index'>index</a>";
}