• Session


    Session

    1. 概念:

    服务端会话技术,在一次会话的多次请求间共享数据,将数据保存在服务器端的对象(HTTPSession)中;

    2. HTTPSession对象

    1. 获取Session对象:
      1. request.getSession()
    2. Session对象的方法:
      1. setAttribute(String name, Object value)
      2. Object getAttribute(String name)
      3. void removeAttribute(String name)

    3. Session原理

    在一次会话的范围内,不同的请求可能会都会创建session对象,而且在一次会话的session对象都是同一个。Session是依赖Cookie实现的,实现的过程如下:

    1. 当某次会话中首次创建Session对象时,会为该Session对象生成一个ID
    2. 在响应信息的信息头里带着一个SetCookie的头,值为 JSESSIONID=325803485DF8983D23D
    3. 浏览器收到响应信息,在浏览器创建一个 Cookie
    4. 浏览器下次请求,请求头会带着Cookie,值为 JSESSIONID=325803485DF8983D23D
    5. 当服务器试图创建Session对象时,首先判断内存中是否对应ID为 325803485DF8983D23D的Session对象,如果有就使用该Session对象

    4.Session的细节

    1. 客户端关闭后,服务器不关闭,两次获取的Session是同一个吗?

      1. 默认情况下不是,因为没有JSESSIONID这个Cookie

      2. 但是客户实现获取到同一个,只要创建一个Cookie,键为 JSESSIONID,值为随便写一个,并设置最大存活时间

        Cookie cookie = new Cookie("JSESSIONID","2340324802d78900f");
        cookie.setMaxAge(60*60);
        response.addCookie(cookie);
        
    2. 当客户端不关闭,服务器关闭,两次获取的Session

      1. ​ 服务器关闭就销毁了Session对象了,不是同一个了!但是要确保数据不丢失,就要在服务器关闭前将Session对象存储到硬盘:
        • Session的钝化:服务器正常关闭前,将Session对象序列化到硬盘上(序列化)
        • Session的活化:服务器启动后,将session文件转化为内存中的Session对象(反序列化)
    3. Session的销毁时间:

      1. 服务器关闭

      2. Session对象调用方法 invalidate()

      3. Session对象的默认失效时间是 30分钟

        • 在web.xml里可以修改该失效时间:

            <!-- ==================== Default Session Configuration ================= -->
            <!-- You can set the default session timeout (in minutes) for all newly   -->
            <!-- created sessions by modifying the value below.                       -->
          
              <session-config>
                  <session-timeout>30</session-timeout>
              </session-config>
          
          

    5. Session的特点:

    1. Session是用于存储一次会话的多次请求数据,存储在服务器端

    2. session可以存储任意类型的、任意大小的数据

    3. 与cookie的区别:

      Cookie Session
      数据存储在客户端 数据存储在服务器端
      数据没有大小限制 数据有大小,数量限制
      数据相对安全 数据相对不安全
  • 相关阅读:
    c# 坑人的发邮件组件
    生成拼音
    FileDb
    WMI tester
    c# 纯代码调用 webservice
    c# 中 利用 CookieContainer 对 Cookie 进行序列化和反序列化校验
    在经过身份验证的服务中不支持跨域 javascript 回调
    c# 使用 namedpipe 通信
    c++ 创建线程以及参数传递
    c#函数地址传入c++
  • 原文地址:https://www.cnblogs.com/zhuobo/p/10908881.html
Copyright © 2020-2023  润新知