我们经常会遇到这样一个问题:
在写前端登陆的代码时,登陆会有自动登陆的功能。
如图所示,这是一个简单的登陆页面,其中包含了一个自动登陆功能,这个功能其实很好做。
1.这个功能可以靠cookie实现
判断如果用户勾选了自动登陆,就将用户信息保存在cookie中,那么每次跳转登陆页面前,做一下判断,如果cookie中的值和数据库中的值时一致的,就直接跳转到其他内容。这个话题不是本次讨论内容,不过后期会加上去的。
- 2019.07.25 添加内容:
cookie可以借助一个好用的插件,jQuery的cookie插件!
cdn链接为:
<script src="https://cdn.bootcss.com/jquery-cookie/1.4.1/jquery.cookie.min.js"></script>
用法:
- 塞值:直接
$.cookie(key,value)
例如,$.("user","zhangsan")
- 取值:
$.cookie(key)
例如,$.cookie("user")
的值为zhangsan
2. 通过session实现
cookie和session:
简单的说,session时存在于服务器端的,cookie时存在于浏览器端的。cookie的存放时间可人为调整。
session用法
session的实现,其实可cookie差不多,但是我在这里没有去拿数据库的内容和session作比较,因为我的判断方式稍微不同。
- 通过controller层的方法进入到登陆页面:
@RequestMapping("/login")
public String in(HttpSession session){
Object username = session.getAttribute("username");
Object password = session.getAttribute("password");
System.out.println("session++++++++++"+username+password);
if (username != null && password != null){
return "redirect:list";
}else {
return "login";
}
}
其中
Object username = session.getAttribute("username");
Object password = session.getAttribute("password");
这两句话时获取session中的账户密码,当然,在初次登陆的时候,我们session中并没有存放。所以直接走return "login";
到登陆页面;
我并没有抽取数据库中的数据做对比,是因为我在接下来添加session的时候,先判断了用户在点击登陆的时候,账户密码是否正确,如果正确接着判断:用户是否勾选了“自动登陆”,如果时,那么将账户密码信息保存在session中,这样就做到了不比对数据库,只判断空不空就能使安全自动登陆的功能,代码如下:
2. 点击登陆后执行的controller方法:
@RequestMapping("/loginUser.action")
@ResponseBody
public String login(User user,boolean rememberMe,HttpSession session) {
System.out.println(user);
System.out.println("rememberMe:"+rememberMe);
boolean result = userService.confirm(user);
System.out.println(result);
if (result) {
System.out.println("账号密码正确!");
if (rememberMe) {
session.setAttribute("username",user.getUserName());
session.setAttribute("password",user.getPassword());
}
return "success";
} else {
System.err.println("账号密码错误!!!!");
return "error";
}
}
这个方法的使使用了jason传输了字符串,返回给前端的ajax。
首先前端将账户密码框、勾选框的信息传送过来,然后验证账户密码信息,接着做判断,根据2中分析的情况决定是否给session赋值,然后告诉前台是否放行
3. 注意内容是:session的用法:
在方法中加入参数:HttpSession session
session赋值:session.setAttribute("username",user.getUserName());
session取值:session.getAttribute("username");