zoukankan      html  css  js  c++  java
  • Session存储

    session其实分为服务器端Session和客户端Session。

    当用户首次与Web服务器建立连接的时候,服务器会给用户分发一个sessionid作为标识。用户每次提交页面,浏览器都会把这个sessionid包含在 HTTP头中提交给Web服务器,这样Web服务器就能区分当前请求页面的是哪一个客户端。这个sessionid就是保存在客户端的,属于客户端Session。

    tomcat生成的sessionid叫做jsessionid。

    在访问tomcat服务器HttpServletRequest的getSession(true)的时候会创建session,tomcat的ManagerBase类提供创建sessionid的方法:随机数+时间+jvmid。

    服务端session,tomcat的StandardManager类将session存储在内存中,也可以持久化到文件,数据库,缓存等。

    客户端只保存sessionid到cookie中,而不会保存session,session销毁只能通过invalidate或超时,关掉浏览器并不会关闭session。当用户禁用了cookie的话,服务器端就得不到sessionid。这时我们可以使用url的方式或隐藏域的方式来存储客户端Session。

    spring-session

    传统模式中,当request进入web容器,根据reqest获取session时,如果web容器中存在session则返回,如果不存在,web容器则创建一个session。然后返回response时,将sessonId作为response的head一并返回给客户端或者浏览器。

    另一种思路是将session从web容器中抽出来,形成独立的模块,以便分布式应用或者集群都能共享。

    spring-session的核心思想在于此:将session从web容器中剥离,存储在独立的存储服务器中。目前支持多种形式的session存储器:Redis、Database、MogonDB等。session的管理责任委托给spring-session承担。当request进入web容器,根据request获取session时,由spring-session负责存存储器中获取session,如果存在则返回,如果不存在则创建并持久化至存储器中。

    二者区别如下图:

    1286175-20180918232306231-326643336

  • 相关阅读:
    [转载]OpenGL函数参考(中文版)
    [转载]OpenGL 中常用的 GLUT 函数库
    VC6.0 VS2008 openGL环境配置 [和glut库的加入]
    java测试一个类的方法,用junit
    openal配置(更新)
    jsp URL 传参数 服务端接收后乱码的问题
    NeHe OpenGL 第二课 学习总结
    vs2008 添加头文件路径
    困惑之一:c++初始化成员列表
    C++中一些对原理描述相当好得语句
  • 原文地址:https://www.cnblogs.com/amunote/p/10336394.html
Copyright © 2011-2022 走看看