今天遇到一个奇怪的问题,自己添加了一个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-10-02 05:23:37