JavaWeb中session创建于销毁的问题

今天遇到一个奇怪的问题,自己添加了一个session的监听,用来监听在线的人数。但打开浏览器时一直没有走进这个监听中来。最后百度找到了原因:

我们一直存在一个误区,javaweb中的session什么时候创建?我一直认为是第一次与浏览器建立连接的时候,就自动创建一个session。其实不然!

只有在server端的代码调用request.getSession(true)这个方法时,才互创建一个session。其中true表示,如果存在一个相同的session,则直接返回,如果不存在,则创建一个新的session;false表示,如果不存在,则返回null。而我的代码中比较简单,没有用到session存储东西,所有一直没调用request.getSession(true)这个方法。

在拦截器中加了这句话之后,问题又来了,后面的每个请求,都会去创建一个session,这与之前的理解的一个浏览器对应一个session又相冲突了。猜测是因为每次请求的sessionId不同导致的,应该是在请求响应的时候没有设置cookie导致的,HTTP请求是无状态的,每个请求对server来说都是新的。

为了搞清内部原理,决定跟着源码继续看下session具体的创建和销毁逻辑吧。

时间: 2024-08-01 18:00:47

JavaWeb中session创建于销毁的问题的相关文章

Spring中的创建与销毁

在bean中添加属性init-method="方法名" destroy-method="方法名" init-method        该方法是由spring容器执行        在构造函数之后执行        如果在构造函数之后,在调用方法之前要做一些工作,可以在init方法中完成destroy-method        如果该bean是单例,则在spring容器关闭或者销毁的时候,执行该方法        如果该bean是多例,则spring容器不负责销毁

javaweb中实现在线人数统计

session并不是浏览器关闭时销毁的,而是在session失效的时候销毁下列代码就是监测session创建.销毁 package com.my.count; import javax.servlet.http.*; public class SessionCounter implements HttpSessionListener { private static int activeSessions = 0; //session创建时执行 public void sessionCreated

JAVAWEB开发之Session的追踪创建和销毁、JSP详解(指令,标签,内置对象,动作即转发和包含)、JavaBean及内省技术以及EL表达式获取内容的使用

Session的追踪技术 已知Session是利用cookie机制的服务器端技术,当客户端第一次访问资源时 如果调用request.getSession() 就会在服务器端创建一个由浏览器独享的session空间,并分配一个唯一且名称为JSESSIONID的cookie发送到浏览器端,如果浏览器没有禁用cookie的话,当浏览器再次访问项目中的Servlet程序时会将JSESSIONID带着,这时JSESSIONID就像唯一的一把钥匙  开启服务器端对应的session空间,进而获取到sessi

JAVAWEB开发之Session的追踪创建和销毁、JSP具体解释(指令,标签,内置对象,动作即转发和包括)、JavaBean及内省技术以及EL表达式获取内容的使用

Session的追踪技术 已知Session是利用cookie机制的server端技术.当client第一次訪问资源时 假设调用request.getSession() 就会在server端创建一个由浏览器独享的session空间,并分配一个唯一且名称为JSESSIONID的cookie发送到浏览器端,假设浏览器没有禁用cookie的话,当浏览器再次訪问项目中的Servlet程序时会将JSESSIONID带着.这时JSESSIONID就像唯一的一把钥匙  开启server端相应的session空

学习笔记(五)Session 的创建和销毁 生命周期 表单重复提交及实现验证码

1. Session 的创建和销毁 page 指定的 session 属性: 1). 默认情况下, 第一次访问一个 WEB 应用的一个 JSP 页面时, 该页面都必须有一个和这个请求相关联的 Session 对象. 因为 page 指定的 session 属性默认为 true 2). 若把 session 属性改为 false, JSP 页面不会要求一定有一个 Session 对象和当前的 JSP 页面相关联所以若第一次访问当前 WEB 应用的 JSP 页面时, 就不会创建一个 Session

javaWeb中的session

什么是sesson? 服务器会为每个浏览器 创建单独Session对象,Session对象用来保存与对应浏览器相关会话数据 session和cookie的区别? Session和Cookie 相比,Cookie 数据保存客户端,Session数据保存服务器端Cookie 好处:保存客户端,不占用服务器资源 (记住用户名密码.上次访问时间 .商品浏览记录 ...) 缺点:安全性Session 好处:数据保存服务器端,更加安全 ,缺点:占用服务器资源,当Session数据非常多时,服务器压力非常大

Java监听器中ServletRequestListener监听Request的创建和销毁

ServletRequest和HttpServletRequest的区别 HttpServletRequest和ServletRequest都是接口,HttpServletRequest继承自ServletRequest HttpServletRequest比ServletRequest多了一些针对于Http协议的方法.如getHeader(), getMethod(),getSession()等等. HttpServletRequest 客户端浏览器发出的请求被封装成为一个HttpServle

java:session的创建与销毁

创建session: ServletActionContext.getRequest().getSession().setAttribute("update", model); DutiesScienceEndowScore update = (DutiesScienceEndowScore) ServletActionContext.getRequest().getSession().getAttribute("update"); 销毁session: Servl

JavaWeb中的监听器

JavaWeb中的监听器 l  事件源:三大域! ServletContext ¨       生命周期监听:ServletContextListener,它有两个方法,一个在出生时调用,一个在死亡时调用: 2       void contextInitialized(ServletContextEvent sce):创建SErvletcontext时 2       void contextDestroyed(ServletContextEvent sce):销毁Servletcontext