每次在进入登录页面的时候都要进行用户名和密码的输入,用户的体验不好。
使用cookie来实现记住密码的功能。我实现的是逻辑比较简单的记住密码操作;并没有涉及安全性比较高的业务;比如说与支付相关的密码,例淘宝,基本上每次都需要自己重新输入密码。
首先梳理一下记住密码的操作流程:
- 页面点击“记住密码”选项卡;
- 传递一个“rember”的flag标志到后台;
- 后台处理用户信息和flag标志位;验证成功添加一个Cookie;
- 后台设置Cookie有效时间和路径,然后返回一个response;
- 前台检测请求中时候含有用户信息的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,然后查询数据库,去到用户记住的密码;