首页 > 其他分享 >Session原理分析以及Session的细节

Session原理分析以及Session的细节

时间:2022-08-15 09:33:31浏览次数:60  
标签:浏览器 Session 对象 细节 session Cookie 服务器 原理

Session原理分析

session的实现是依赖于cookie的

当客户端第一次请求会话对象时,服务器会创建一个 Session 对象,并为该 Session 对象分配一个唯一的 SessionID (用来标识这个 Session 对象);

服务器将 SessionID 以 Cookie(Cookie 名称为:“ JSESSIONID ”,值为 SessionID 的值,如 Set-Cookie:JESSIONID=10 )的形式发送给客户端浏览器;

客户端浏览器再次发送 HTTP 请求时,会将携带 SessionID 的 Cookie (如 cookie: JESSIONID=10 )随请求一起发送给服务器;

服务器从请求中读取 SessionID,然后根据 SessionID 找到对应的 Session 对象。

在 同一次会话中 ,多次请求获取的是 同一个Session对象

注意:

  流程中的 Cookie 是容器自动生成的,它的 maxAge 属性取值为 -1,表示仅当前浏览器有效。

  浏览器关闭时,对应的 Session 并没有失效,但此时与此 Session 对应的 Cookie 已失效,导致浏览器无法再通过 Cookie 获取服务器端的 Session 对象。

  同一浏览器的不同窗口共享同一 Session 对象,但不同浏览器窗口之间不能共享 Session 对象。

 

 

 

 

 

 

 

Session的细节

1、当客户端关闭后,服务器不关闭,再次获取session是否是同一个?

  默认情况下:不是

  如果需要相同,则可以创建Cookie,键为JSESSIONID,设置最大存活时间,让cookie持久化保存

@WebServlet("/SessionDemo3")
public class SessionDemo3 extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //使用session共享数据
        HttpSession session = request.getSession();
        System.out.println(session);
        
        //期望客户端关闭后,session也能相同
        Cookie cookie = new Cookie("JSESSIONID",session.getId());
        cookie.setMaxAge(60*60);
        response.addCookie(cookie);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doPost(request, response);
    }
}

2、当客户端不关闭,服务器关闭后,再次获取session是否是同一个?

  不是同一个对象,但是要确保数据不丢失

    session的钝化:

      在服务器正常关闭之前将session对象序列化到硬盘上

    session的活化:

      在服务器启动后,将session文件转化为内存中的session对象即可。

3、session什么时候被销毁

  1、服务器关闭

  2、session对象调用invalidate()

  3、session默认失效时间30分钟

    选择性配置修改

    在E:\apache-tomcat-9.0.39\conf\web.xml中修改

    <session-config>
        <session-timeout>30</session-timeout>
    </session-config>

 

标签:浏览器,Session,对象,细节,session,Cookie,服务器,原理
From: https://www.cnblogs.com/xjw12345/p/16587042.html

相关文章

  • 会话技术_Cookie快速入门和会话技术Cookie原理分析
    会话技术会话:一次会话中包含多次请求和响应。一次会话:浏览器第一次给服务器资源发送请求,会话建立,知道有一方断开为止功能:在一次会话的范围内的多次请求间,共享数据......
  • ForkJoinPool的使用及基本原理
    一、简介ForkJoinPool是自Java7开始,提供的一个用于并行执行的任务框架。其主旨是将大任务分成若干小任务,之后再并行对这些小任务进行计算,最终汇总这些任务的结果,得到最终......
  • 会话技术Session_细节和特点
    细节:1.当客户端关闭后,服务器不关闭,两次获取Session是否为同一个?  1.默认情况下不是把浏览器关闭后在访问session的地址值不一样了   如果需要相同,则可以创建......
  • Camera工作原理
    Camera基础知识一口Linux 2022-08-1211:46 发表于江苏 以下文章来源于嵌入式软件开发交流 ,作者young嵌入式软件开发交流.分享嵌入式Android,Linux,Zigbee,Open......
  • Sentinel源码分析-滑动窗口统计原理
    滑动窗口技术是Sentinel比较关键的核心技术,主要用于数据统计通过分析StatisticSlot来慢慢引出这个概念@Overridepublicvoidentry(Contextcontext,ResourceWrap......
  • HTTPS的实现原理 ---- 核心 SSL/TLS协议
    是在应用层和传输层之间添加的安全层(SSL/TLS协议)端口号:HTTP默认是80,HTTPS默认是443。URL前缀:HTTP的URL前缀是http://,HTTPS的URL前缀是https://。......
  • vue双向绑定原理分析
    1.vue双向绑定原理vue.js则是采用数据劫持结合发布者-订阅者模式的方式,通过Object.defineProperty()来劫持各个属性的setter,getter,在数据变动时发布消息给订阅者,触发相应......
  • Sentinel 源码分析- 熔断降级原理分析
    直接从Sentinel源码demoExceptionRatioCircuitBreakerDemo看起直接看他的main函数publicstaticvoidmain(String[]args)throwsException{initDegradeRu......
  • PDF划词拾取原理
    背景PDF划词拾取在许多业务场景中都有使用,典型的场景例如划词翻译、划词批注、下划线、删除线等等。网上通用做法是用css实现下划线、删除线、高亮。但是这种做法通常不利......
  • Sentinel 源码分析-限流原理
    1.gitclonesenetinel源码到本地,切换到release1.8分支2.找到FlowQpsDemo.java,根据sentinel自带的案例来学习sentinel的原理3.先看main方法publicstaticvoid......