您的位置:首页 > 其它

通过cookie记住用户名和密码

2016-11-18 20:42 218 查看


1.登陆页面如下:






每个字段对应的属性name如下表:


用户帐号name
登陆密码password
验证码checkNum
记住我rememberMe


2.Action中的处理如下:

在用户第一次登陆后,进行Cookie进行处理

登陆处理

[java] view
plain copy

 





/**登陆*/  

public String login() throws Exception{  

    //处理验证码:判断验证码输入的是否正确  

    boolean flag=VerificationCodeUtil.isCheckNum(request);  

    if(!flag){  

        this.addFieldError("checkNum", "验证码有误");  

        return "loginUI";  

    }  

    User user=userService.findByLoginNameAndPassword(model.getName(),model.getPassword());  

    if(user==null){  

        addFieldError("login", "用户名或密码不正确");  

        return "loginUI";  

    }else{  

        ActionContext.getContext().getSession().put("user", user);  

        //处理Cookie  

        addCookie(model.getName(),model.getPassword(),response,request);  

        return "toIndex";  

    }     

}  

Cookie处理:

[java] view
plain copy

 





/**Cookie的实现    **/  

private void addCookie(String name, String password,HttpServletResponse response, HttpServletRequest request) throws UnsupportedEncodingException {  

    if(StringUtils.isNotBlank(name)&&StringUtils.isNotBlank(password)){  

        //创建Cookie  

        Cookie nameCookie=new Cookie("name",URLEncoder.encode(name,"utf-8"));  

        Cookie pswCookie=new Cookie("psw",password);  

          

        //设置Cookie的父路径  

        nameCookie.setPath(request.getContextPath()+"/");  

        pswCookie.setPath(request.getContextPath()+"/");  

          

        //获取是否保存Cookie  

        String rememberMe=request.getParameter("rememberMe");  

        if(rememberMe==null){//不保存Cookie  

            nameCookie.setMaxAge(0);  

            pswCookie.setMaxAge(0);  

        }else{//保存Cookie的时间长度,单位为秒  

            nameCookie.setMaxAge(7*24*60*60);  

            pswCookie.setMaxAge(7*24*60*60);  

        }  

        //加入Cookie到响应头  

        response.addCookie(nameCookie);  

        response.addCookie(pswCookie);  

    }  

}  



3.JSP页面的处理如下:

在登陆的JSP页面中加入下面代码,以获得用户名和密码并自动填写:

[html] view
plain copy

 





<%  

    String name="";  

    String psw="";  

    String checked="";  

    Cookie[] cookies=request.getCookies();  

    if(cookies!=null&&cookies.length>0){   

        //遍历Cookie  

        for(int i=0;i<cookies.length;i++){  

            Cookie cookie=cookies[i];  

            //此处类似与Map有name和value两个字段,name相等才赋值,并处理编码问题   

            if("name".equals(cookie.getName())){  

                name=URLDecoder.decode(cookie.getValue(),"utf-8");  

                //将"记住我"设置为勾选   

                checked="checked";  

            }  

            if("psw".equals(cookie.getName())){  

                psw=cookie.getValue();  

            }  

        }  

    }  

 %>  

最后对用户名,密码,记住我字段添加value即可:

[html] view
plain copy

 





<TR>  

    <TD class="td">用户帐号:</TD>  

    <TD class="td"><input name="name" type="text" value="<%=name %>" id="name"/></TD>  

</TR>  

<TR>  

    <TD class="td">登录密码:</TD>  

    <TD class="td"><input name="password" type="password" value="<%=psw %>" id="password"></TD>  

</TR>  

<TR>  

    <TD class="td">记住我:</TD>  

    <TD class="td"><input name="rememberMe" type="checkbox" id="rememberMe" class="checkbox" <%=checked %>></TD>  

</TR>  


4.可能出现的问题


如果出现设置了却没有自动填写用户名和密码,则可能是地址的问题:

解决办法:

1.进入Internet选项,点击浏览历史记录一栏的设置



2.进入浏览记录设置后,点击查看文件



3.在弹出的文件夹里找到Cookie文件,名字为你的项目名+“/”,格式如下图,这个文件一般在文件夹的最后面,将此文件复制到桌面,注:此文件是无法直接在该文件夹里打开的。








4.如下图,第三行为保存项目工程的路径,此时在Action里的Cookie处理中,根据该地址设置对应的Cookie父路径即可,上文已经设置。



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  记住密码 cookie