在网上看到很多关于cookie记录登录密码的功能,但是大部分都是jsp界面,最近刚好有个项目用到了cookie功能,所以编写了这个介绍,补全一下。
1、第一步,首先需要在登录界面中写一个form表单(这个不用多说)
<form id="login" action="#">
<input id="account" name="account" type="text" value="<%=name %>" />
<input id="password" name="password" type="password" value="<%=psw %>" />
<input type="checkbox" name="remPassword" value="1" id="remPassword" <%=checked %>>记住密码
</form>
<input type="button" value="登录" onclick="login();"/>
2、应用ajax异步登录后台,验证账号和密码
function login(){
//这一步是关键,用来判断是否勾选了记住密码框,如果未勾选,传入后台为“”,如果勾选,传入后台为1
var checkedVal = "";
if($("input[type='checkbox']").is(":checked")){
checkedVal = "1";
}
$.ajax({
type : "post",
url : 'XXX/login',
data : {
account : $('#account').val(),
password : $('#password').val(),
rememberMe : checkedVal ,
},
dataType : 'json',
success : function(msg){
if(msg.status == 200){ //返回状态为200,表示成功
swal('登录成功','欢迎登录','success');
}else{ //返回其他状态,表示失败,没有这个账号
swal('登录失败','请重新登录','error');
}
}
});
}
3 jsp中记住密码功能的实现
<%
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();
}
}
}
%>
4、后台
后台代码仅供参考,因为每个项目都不一样。其中有省去一部分代码,但是核心已经列出。
4.1 action信息
@RequestMapping(value="/login")
public void login(
@RequestParam(value="account") String account,
@RequestParam(value="password") String password,
@RequestParam(value="rememberMe") String rememberMe,
HttpServletRequest request, HttpServletResponse response)throws Exception{
String newPsw = MD5Utils.digest(password);//用MD5进行加密处理(根据需要,决定是否加密)
User user= userService.login(account,newPsw);//查询数据库,判断输入账号、密码是否正确
if(user != null ){
xxx.setStatus(200);//返回状态为200
request.getSession().setAttribute("user", user);//向session域中添加
//处理cookie
addCookie(account,password,rememberMe,response,request);
}
}
4.2 添加cookie方法
private void addCookie(
String name, String password,String rememberMe,
HttpServletResponse response, HttpServletRequest request) throws Exception {
if(StringUtils.isNotBlank(name)&&StringUtils.isNotBlank(password)){
//设置响应格式
response.setCharacterEncoding("UTF-8");
Cookie nameCookie=new Cookie("name",name);
Cookie pswCookie=new Cookie("psw",password);
//设置Cookie的父路径
nameCookie.setPath(request.getContextPath()+"/");
pswCookie.setPath(request.getContextPath()+"/");
//获取是否保存Cookie
if(rememberMe == null || rememberMe == ""){//不保存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);
}
}