登录成功后如何利用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如果被人窃取,则会有泄露信息的危险。

  1. 通过设置httpOnly属性,这样cookie只在http中传输,而不会被脚本窃取,但是网络拦截http请求还是会得到cookie。
  2. 在cookie中加入校验信息,这个校验信息与用户的使用环境相关,比如ip地址,计算机的物理地址等,在服务器端对校验的时候,如果校验值发生了变化,则要求重新登录。
posted @ 2017-05-05 11:42  边城叙缘  阅读(14092)  评论(1编辑  收藏  举报