Session的生命周期 服务器中的seesion是何时建立的?

来源:互联网 发布:json 判断key是否存在 编辑:程序博客网 时间:2024/04/28 05:36

下面是关于Session的生命周期的一段常见描述

Session保存在服务器端。为了获得更高的存取速度,服务器一般把Session放在内存里。每个用户都会有一个独立的Session。如果Session内容过于复杂,当大量客户访问服务器时可能会导致内存溢出。因此,Session里的信息应该尽量精简。

Session在用户第一次访问服务器的时候自动创建。需要注意只有访问JSP、Servlet等程序时才会创建Session,只访问HTML、IMAGE等静态资源并不会创建Session。如果尚未生成Session,也可以使用request.getSession(true)强制生成Session。

Session生成后,只要用户继续访问,服务器就会更新Session的最后访问时间,并维护该Session。用户每访问服务器一次,无论是否读写Session,服务器都认为该用户的Session"活跃(active)"了一次。

服务器真的会自动创建Session吗?是tomcat这种容器帮我们做了吗?其实这种说法不是很准确

我们经常会写这样一段代码:

HttpSession session = request.getSession();

有些同学还知道这个方法有个重载,也可以这样写:

HttpSession session = request.getSession(true);  或  HttpSession session = request.getSession(false);

那这些有什么区别?官方解释如下:

true : 当session == null 时创建一个新的session

false  :    返回当前的session

request.getSession(); 等同于  request.getSession(true);

这个解释一直让我很费解,我一直认为session是不会为null的,今天仔细查了一个资料,自己也亲自测试了一把,原来我一直的想法大错特错了

session是服务器建立的,但服务器不会主动建立,当一个请求过来时,服务器并不会建立一个session,而是要这样:

request.getSession();

当我们用程序通知服务器时它才会建立一个会话。


在jsp文件中有一个默认的属性 <%page session="true" />,翻译成java后就是:

session = pageContext.getSession();

所以当我们访问一个jsp文件的时候,如果没有去更改这个默认值,那也会建立一个会话,这也是大多数人会认为自动创建session的原因了,其实还是相当于我们主动通知服务器去创建


综上所述:

Tomcat这类服务器不会自动的创建session,只有当我们主动通知它时,才会创建会话









0 0
原创粉丝点击