JAVA之登录页面记住密码之COOKIE实现

每次在进入登录页面的时候都要进行用户名和密码的输入,用户的体验不好。

使用cookie来实现记住密码的功能。我实现的是逻辑比较简单的记住密码操作;并没有涉及安全性比较高的业务;比如说与支付相关的密码,例淘宝,基本上每次都需要自己重新输入密码。

首先梳理一下记住密码的操作流程:

  1. 页面点击“记住密码”选项卡;
  2. 传递一个“rember”的flag标志到后台;
  3. 后台处理用户信息和flag标志位;验证成功添加一个Cookie;
  4. 后台设置Cookie有效时间和路径,然后返回一个response;
  5. 前台检测请求中时候含有用户信息的cookie,然后传递到用户名和密码input中的value中

前台代码:

<%  //java
    String name="";  
    String psw="";  
    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=java.net.URLDecoder.decode(cookie.getValue(),"utf-8");  

            }  
            if("psw".equals(cookie.getName())){  
                psw=cookie.getValue();  
            }  
        }  
    }  
 %>  
//dom
<div id="remberBtn" class="rember-box">
			<img src="images/checkbox-icon.png" alt="" >
			<span>记住密码</span>
		</div>

//jquery scripts
$('#remberBtn').on(oTools.clickEvent, function(){
			var $_this = $(this);
			var selected = $_this.data('rember');
			if (selected != true) {
				$_this.data('rember', true);
				$_this.find('img').attr('src', 'images/checkbox-s-icon.png');
			} else {
				$_this.data('rember', false);
				$_this.find('img').attr('src', 'images/checkbox-icon.png');
			}
		});

后台代码:

	private void addCookie(String username, String password,HttpServletResponse response, HttpServletRequest request) throws UnsupportedEncodingException {
		if(!username.equals("") && !password.equals("")){  
	        //创建Cookie  
	        Cookie nameCookie=new Cookie("name",URLEncoder.encode(username,"utf-8"));  
	        Cookie pswCookie=new Cookie("psw",password);  
	          
	        //设置Cookie的父路径  
	        nameCookie.setPath(request.getContextPath()+"/");  
	        pswCookie.setPath(request.getContextPath()+"/");  
	          
	        //获取是否保存Cookie  
	        String rememberMe=request.getParameter("rember");  
	        if(rememberMe==null || rememberMe.equals(false)){//不保存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);  
	    }  			
		}

开发完成之后测试结果;

打开浏览器开发者工具;查询cookie中时候存在你设置的值;

ps:这种事最简单的保存密码的实现方法;并不涉及太深层次的逻辑;因为这种是与客户端直接接触;安全性没有保障;
推荐另一种安全机制比较高的---传递的cookie的value值存储在数据库中;value值对应的密码存储在数据库中;每一次访问登录页面会检测cookie,然后查询数据库,去到用户记住的密码;


评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值