Session
什么是Session
- Session就是一个接口(HttpSession)
- Session就是会话,它是用来维护一个客户端和服务器之间关联的一种技术
- 每个客户端都有自己的一个Session会话
- Session会话中,我们经常用来保存用户登录之后的信息
Cookie保存在客户端,而Session则保存在服务器端
如何创建Session和获取(id号,是否为新)
如果创建和获取Session,它们的API是一样的
request.getSession()
第一次调用是:创建Session会话
之后调用都是:获取前面创建好的Session会话对象
isNew():判断是不是刚创建出来的(新的)
true 表示刚创建
false 表示获取之前创建
每个会话都有一个身份证号,也就是ID值,而且这个ID值是唯一的
getId()得到Session的会话id值
Session生命周期控制
setMaxInactiveInterval(int interval)方法,该方法可以指定Servlet容器使此会话失效之前客户端请求之间的时间间隔,以秒为单位,负数事件指示会话永远不会超时,超过指定时长,session就会被销毁
<session-config>
<session-timeout>20</session-timeout>
</session-config>
可以通过xml配置文件修改超时时长,注:这个方法会设置全部的session会话默认超时时长
getMaxInactiveInterval() 可以获取Session会话超时时间,默认超时时长30分钟
session的超时,指的是,客户端两次请求的最大间隔时长,如果超出这个时长,上次会话的记录就会被删除,再次发送请求,就会创建新的session对象,之前的数据就不存在了
.invalidate() 方法会让当前session会话马上超时
Session会话的id是存在于cookie中,Tomcat创建的储存sessionid的cookie名为JSESSIONID,每次浏览器关闭Session会话并不会删除,但是我们又访问不到session的数据,原因是,储存着sessionid的cookie被删除,导致sessionid丢失,也就找不到上次访问的会话了,这就造成了数据丢失,关闭session的方法只有,会话超时或者 .invalidate() 方法
每次客户端发送请求获取session会话的时候,都会把自己的Cookie发送给服务器,当服务器拿到响应的Cookie之后,发现其中的sessionid信息,就可以找到之前的对象,从而得到之前的信息,但是如果没有这个cookie,在获取会话的时候,服务器找不到对象,就会重新创建一个session对象返回给客户端,这就导致了数据的丢失
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZBrhwrpl-1624329122599)(C:\Users\Administrator\Desktop\笔记\session会话.png)]
也就是说Session技术,底层是基于Cookie技术实现的
也就是说Session技术,底层是基于Cookie技术实现的