前言
一般我们认为 session 是当浏览器打开时 session 将会创建,关闭浏览器时 session 又会失效,那么究竟是不是这样呢?我们具体来了解以下 session 的生命周期。
什么是session
session 我们也成为“会话”,一般我们在 web 页面间跳转时,存储在 session 的数据不会丢失。往往我们用 session 来实现 web 页面间数据的共享与访问。
session 的作用
session 以 “key-value” 方式存取数据,可以存储一些基本类型,也可以存储 Java 对象等。(cookie 只能存ASCII字符串)。
我们可以用 session 实现简单的页面间保持用户处于登录状态,等待。
session 在哪
session 其实是 Servlet 的一个对象实例,也就是 session 是存在于后端服务器的对象,相当于一个全局对象。
每个用户访问服务器都会生成一个 session ,由于 HTTP 是一种无状态协议,我们无法得知访问服务器的用户,session 可以生成一个唯一的ID,以此可以作为一个用户的访问。
(session 的具体实现,这里就不说了)
session 生命周期
当第一次访问服务端的时候 session 就被创建出来,直到浏览器关闭,或者服务器关闭或服务器重启 session 才会失效(也可以通过设置 session 的时限)。
我们常常会浏览多个不同域的网页,所以很明显 session 并不只有一个,对于每个我们访问的服务端来说,它们各持有为用户创建出来的 session。
所以再进一步说,session 在第一次访问 jsp,Servlet 时,就会被创建,而静态页面 HTML 是不会创建的。
session.isNew() 方法
之前一直只认为 isNew()
方法表示 session 是否为最新,而根据 session 的生命周期,我们可以了解到 session.isNew()
表示当 session 为刚创建时,则返回 true。
也就是说,session.isNew()
在 session 被创建的那个页面( jsp )或 Servlet 中,返回为 true。
当前往服务器所在的其他界面,或访问其他 Servlet session.isNew()
都将返回 false。
总结
- session 在第一次访问服务器时才被创建,直到浏览器关闭或者服务器关闭或重启,session才会失效
session.isNew()
只有在 session 被创建的页面(jsp)或 servlet 才会返回 false