java cookie記住密碼的實現

先普及下毫無關係的知識點:

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>";
    }

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章