session

作者: 喧嚣的风儿 | 来源:发表于2016-11-13 00:39 被阅读16次

    状态保持

    1. 店员很厉害,能记住每位顾客的消费数量,只要顾客一走进咖啡店,店员就知道该怎么对待了。这种做法就是协议本身支持状态。
    2. 发给顾客一张卡片,上面记录着消费者信息,一般还有个有效期限。这种做法就是在客户端保持状态。
    3. 发给顾客一张会员卡,只记录卡号,每次消费时店员在店里的系统上匹配卡号对应的客户信息。这种做法就是在服务器端保持状态。

    由于HTTP协议是无状态的,第一种无效。cookie是在客户端保持状态的方案,而session机制是在服务器端保持状态的方案。

    session

    1. 创建: request.getSession 不存在就创建
    2. 销毁: 过期或者调用HttpSession.invalidate();

    服务器创建session出来后,会把session的id号,以cookie的形式回写给客户机;所以cookie需要保存session的id;请求的时候会带有cookie信息

    cookie被禁用后可以通过URL重写

    • response.encodeRedirectURL(java.lang.String url) 用于对sendRedirect方法后的url地址进行重写。
    • response.encodeURL(java.lang.String url)用于对表单action和超链接的url地址进行重写

    这两个方法非常智能,当检测到浏览器没有禁用cookie时,那么就不进行URL重写了。

     String url = response.encodeRedirectURL(request.getContextPath()+"/servlet/ListCartServlet");
     System.out.println(url);
     response.sendRedirect(url);
    

    集群 session

    在集群环境中不同节点session不一致的问题

    session 分类.png
    方式 缺点
    粘性session: 将用户分发到指定服务器 丧失容灾性而且影响性能
    客户端保存:使用cookie保存所有session信息 不安全,提供传输成本
    节点间复制:服务器做session复制 性能随着服务器增加急剧下降
    集中式管理:使用其它存储,如DB,内存,NFS(Network File System) 额外定制;序列化问题

    spring session
    http://docs.spring.io/spring-session/docs/current/reference/html5/guides/httpsession.html#how-does-it-work
    http://projects.spring.io/spring-session/#quick-start

    参考

    http://suhuanzheng7784877.iteye.com/blog/968913
    http://blog.sina.com.cn/s/blog_495697e6010143tj.html

    相关文章

      网友评论

          本文标题:session

          本文链接:https://www.haomeiwen.com/subject/zhtcpttx.html