1. 程式人生 > >(crm筆記2-6)使用者登入問題之cookie記住密碼

(crm筆記2-6)使用者登入問題之cookie記住密碼

使用者登入問題之cookie記住密碼

1、需求



      這個功能其實隨處可見,任何一個網站都需要在使用者登入後為使用者記住密碼,哪怕使用者不用記住,你也要提供這個功能,而且需求很簡單,只要在使用者登入成功後,根據“記住我”這個單選框是否勾選,勾選則實現記住密碼,而且在使用者登入的一定時間內,使用者可以隨意登入網站。

2、思路分析:



      前面已經實現對使用者資訊驗證,現在需要對使用者登入後的資訊進行儲存,也就是在登入成功後,所以資訊的儲存需要在Action中,而且需要在驗證通過後才能進行這個方法對資訊進行儲存。


      1)登入成功的使用者在一定時間內,再次登入不需密碼,使用者資訊需要儲存在session會話中

      2)利用cookie對資訊進行儲存,實現儲存方法,放置在資訊驗證成功後呼叫

      3)在前端頁面獲取儲存的cookie,對cookie內的資訊進行讀取,並顯示在對應的輸入框中。

3、程式碼實現



      1)儲存使用者到session中

//在資訊驗證成功後,新增該方法,儲存物件
SessionUtils.setSysUserToSession(request,sysUser);



      方法實現

/**
 * 儲存當前登入使用者資訊到session中
 * @param request
 * @param sysUser
 */
public static void setSysUserToSession(HttpServletRequest request,SysUser sysUser) {
    HttpSession session=request.getSession();
    if(sysUser==null){
        return;
    }
    session.setAttribute("sysUserKey"
, sysUser); }



      2)將資訊新增到cookie中

        ...

        //登入成功
        SessionUtils.setSysUserToSession(request,sysUser);
        //處理cookie
        addCookie(name,password_ ,response,request);
        return "main";



      新增cookie方法實現addCookie:

private void addCookie(String name, String password_,
            HttpServletResponse response, HttpServletRequest request) {
        if(StringUtils.isNotBlank(name)&&StringUtils.isNotBlank(password)){
            //建立cookie
            Cookie nameCookie=new Cookie("name",java.net.URLEncoder.encode(name));
            Cookie passwordCookie=new Cookie("password",password);
            //設定儲存
            String rememberMe=request.getParameter("rememberMe");
            if(rememberMe==null){//不儲存cookie
                nameCookie.setMaxAge(0);
                passwordCookie.setMaxAge(0);
            }else{//儲存,設定儲存時間
                nameCookie.setMaxAge(7*24*3600);
                passwordCookie.setMaxAge(7*24*3600);
            }
            //加入cookie到響應頭
            response.addCookie(nameCookie);
            response.addCookie(passwordCookie);


        }



      3)在jsp頁面對cookie中的資訊顯示在對應的輸入框中

<%
    String name="";
    String password="";
    String checked="";
    Cookie[] cookies=request.getCookies();
    if(cookies.length>0&&cookies!=null){
        for(int i=0;i<cookies.length;i++){
            Cookie cookie=cookies[i];
            System.out.println(cookie.getName()+":    "+ cookie.getValue());
            if("name".equals(cookie.getName())){
                name=URLDecoder.decode(cookie.getName(),"utf-8");//對於中文漢字進行解碼
                checked="checked";
            }
            if("password".equals(cookie.getName())){
                password=cookie.getValue();
            }
        }
    }
%>


      4)在對應的輸入框中顯示value

value="<%= name %>"

      在“記住我”單選框中加入是否選中:

<%=checked %>

這裡寫圖片描述

      這樣就成功了!




版權宣告:本文為博主原創文章,轉載請註明出處:http://blog.csdn.net/wearge/article/details/78165823