Cookie实现记住密码
做项目的时候,会有登录功能,就会有一个记住我的功能,我们常常选择使用Cookie来存信息。
为什么用Cookie呢?
1.HTTP协议是无状态的,服务器无法记录用户上一次的操作,这样就造成了交互上的阻碍。而Cookie就可以做到绕开HTTP的无状态。服务器借由从Cookie中读取包含的信息,借以维护用户和服务器会话中的状态。
2.Cookie缓存的信息是存到你的硬盘上的,而且你电脑关机也不会造成数据的丢失,最重要的是,你可以设置Cookie的保存时间,从建立Cookie开始,经过这么久,它就会销毁.
- 登录的界面代码 login.html
<div class="form_input clearfix">
<form>
<ul>
<li>
<input type="text" name="nickname" class="name_input" id="nickname" placeholder="请输入用户名" id="nickname">
</li>
<li>
<input type="password" name="pwd" class="pwd_input" id="pwd" placeholder="请输入密码" id="pwd">
</li>
<li>
<div class="more_input clearfix">
<input type="checkbox" checked id="remember">
<label for="remember" >记住我</label>
</div>
</li>
<li>
<input type="button" value="登录" class="submit_input" onclick = "login()">
</li>
</ul>
</form>
</div>
- login.js:判断是否要存cookie,使用MD5对密码进行加密。使用md5加密解密需要用到两个js文件.md5加密解密js文件
分两步:
(1)点击登录的时候判断用户是否勾选了记住我复选框,如果选中传一个判断值交给后台处理。
(2)每次进入到login.html页面,一进入页面之前就要判断,是否有cookie数据,有的话,就取出来。
//模拟登陆
function login(){
//获取用户名
var nickname = $("#nickname").val();
//获取密码
var pwd = $("#pwd").val();
//传过去一个MD5加密过的密码 便于存cookie
var md5pwd=$.base64.btoa(encodeURIComponent(pwd));
//判断是否要使用记住密码和用户名
var flag=0;
if($("#remember").prop("checked") ){//选择了记住我
flag=1;
}
//发送请求 登录
$.post("member/login",{nickName:nickname,pwd:pwd,flag:flag,md:md5pwd},function(data){
data=parseInt($.trim(data));
if(data>0){//登录成功
//跳转转网页
location.href = "member/index";
}else{
alert("用户名或密码错误");
location.href = "login.html";
}
},"text")
}
//每次一进入到login.html都要进行判断是否有cookie
$(function(){
//取cookie
var str=document.cookie;
var pwd=str.split(";")[0].split("-")[1];
var pwd = decodeURIComponent($.base64.atob(pwd));//解密
$("#nickname").val(str.split(";")[0].split("=")[1].split("-")[0]);
$("#pwd").val(pwd);
})
- 后台存cookie的处理代码:MemberInfoController.java
@Controller
@RequestMapping("/member")
public class MemberInfoController{
@Autowired
private IMemberInfoBiz memberInfoBiz;
@RequestMapping("/login")
@ResponseBody
public int Login(@RequestParam Map<String,Object> map,HttpSession session,HttpServletResponse response) throws UnsupportedEncodingException, NoSuchAlgorithmException{
int result=-1;
MemberInfo member=memberInfoBiz.login(map);
if(member!=null){//登陆成功
// 判断是否要存cookie
if("1".equals(map.get("flag"))){//说明勾选了记住我
//获取到用户名和密码
String loginInfo=map.get("nickName")+"-"+map.get("md");
//实例化Cookie对象
Cookie userCookie = new Cookie("LoginInfo",loginInfo);
//设置编码集
URLEncoder.encode(loginInfo,"utf-8");
//设置cookie的生命周期 7天
userCookie.setMaxAge(60*60*24*7);
userCookie.setPath("/");
response.addCookie(userCookie);
}
result=1;
}
return result;
}
}