Session介绍、API、生命周期、应用、与Cookie区别

举报
斌哥来了 发表于 2021/07/27 18:55:58 2021/07/27
【摘要】 什么是Session Session 是另一种记录浏览器状态的机制。不同的是 Cookie 保存在浏览器中, Session 保存在服务器中。用户使用浏览器访问服务器的时候,服务器把用户的信息以某种的形式记录在服务器,这就是 Session 如果说 Cookie 是检查用户身上的 ” 通行证 “ 来确认用户的身份,那么 Session 就是通过检查服务器上的 ”...

什么是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的是不同的


【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。