登录成功后如何利用cookie保持登录状态
Cookie是一种服务器发送给浏览器的一组数据,用于浏览器跟踪用户,并访问服务器时保持登录状态等功能。
通常用户登录的时候,服务器根据用户名和密码在服务器数据库中校验该用户是否正确,校验正确后则可以根据用户ID和时间戳等属性加密生成一个Token,并返回给浏览器。
生成一个ticket的例子:
WebUtils.saveCookie(response, “ticket”, webTicket, -1, "/", null);
这样浏览器就会得到一个cookie
只要这个访问回话没有关闭,所有访问服务器的请求都会带上这个cookie。
服务器通过拦截器来校验用户的登录状态
//伪代码
public class PassPortIntercepter extends HandlerInterceptorAdapter {
public boolean preHandler(HttpServletRequest request, HttpServletResponse response) {
//拦截请求
String ticket = request.getParameter("ticket");
//根据ticke解密用户的id
long id = SessionUtil.build(ticket).getUserId();
//再从数据库中访问是否存在这个用户
UserInfo user = userInfoService.getUserBy(id);
//如果不存在user,讲该请求拦截,并跳回登录页
if(user == null) {
return false;
}
return super.preHandle(request, response, handler);
}
}
这种情况下,cookie如果被人窃取,则会有泄露信息的危险。
- 通过设置httpOnly属性,这样cookie只在http中传输,而不会被脚本窃取,但是网络拦截http请求还是会得到cookie。
- 在cookie中加入校验信息,这个校验信息与用户的使用环境相关,比如ip地址,计算机的物理地址等,在服务器端对校验的时候,如果校验值发生了变化,则要求重新登录。