Session介绍、API、生命周期、应用、与Cookie区别
什么是Session
Session 是另一种记录浏览器状态的机制。不同的是 Cookie 保存在浏览器中, Session 保存在服务器中。用户使用浏览器访问服务器的时候,服务器把用户的信息以某种的形式记录在服务器,这就是 Session
如果说 Cookie 是检查用户身上的 ” 通行证 “ 来确认用户的身份,那么 Session 就是通过检查服务器上的 ” 客户明细表 “ 来确认用户的身份的。 Session 相当于在服务器中建立了一份 “ 客户明细表 ” 。
为什么要使用Session技术?
Session 比 Cookie 使用方便, Session 可以解决 Cookie 解决不了的事情
Session 可以存储对象, Cookie 只能存储字符串
Session API
(01)long getCreationTime();【获取Session被创建时间】
(02)String getId();【获取Session的id】
(03)long getLastAccessedTime();【返回Session最后活跃的时间】
(04)ServletContext getServletContext();【获取ServletContext对象】
(05)void setMaxInactiveInterval(int var1);【设置Session超时时间】
(06)int getMaxInactiveInterval();【获取Session超时时间】
(07)Object getAttribute(String var1);【获取Session属性】
(08)Enumeration getAttributeNames();【获取Session所有的属性名】
(09)void setAttribute(String var1, Object var2);【设置Session属性】
(10)void removeAttribute(String var1);【移除Session属性】
(11)void invalidate();【销毁该Session】
(12)boolean isNew();【该Session是否为新的】
Session作为域对象
从上面的 API 看出, Session 有着 request 和 ServletContext 类似的方法。其实 Session 也是一个域对象 。 Session 作为一种记录浏览器状态的机制, 只要 Session 对象没有被销毁, Servlet 之间就可以通过 Session 对象实现通讯
试试吧,在Servlet4中设置Session属性
在Servlet5中获取到Session存进去的属性
访问Servlet4,再访问Servlet5
一般来讲,当我们要存进的是 用户级别的数据就用Session ,那什么是用户级别呢? 只要浏览器不关闭,希望数据还在,就使用Session来保存 。
Session的生命周期和有效期
(1)Session在用户 第一次访问服务器Servlet,jsp等动态资源就会被自动创建,Session对象保存在内存里 ,这也就为什么上面的例子可以 直接使用request对象获取得到Session对象 。
(2)如果访问HTML,IMAGE等静态资源Session不会被创建
(3)Session生成后,只要用户继续访问,服务器就会更新Session的最后访问时间,无论 是否对Session进行读写,服务器都会认为Session活跃了一次 。
(4)由于会有越来越多的用户访问服务器,因此Session也会越来越多。 为了防止内存溢出,服务器会把长时间没有活跃的Session从内存中删除,这个时间也就是Session的超时时间 。
(5)Session的超时时间默认是30分钟,有三种方式可以对Session的超时时间进行修改
第一种方式:在tomcat/conf/web.xml文件中设置,时间值为20分钟, 所有的WEB应用都有效
第二种方式: 在单个的web.xml文件中设置,对单个web应用有效, 如果冲突以自己的web应用为准 。
第三种方式: 通过setMaxInactiveInterval()方法设置
Session的有效期与Cookie的是不同的
- 点赞
- 收藏
- 关注作者
评论(0)