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个月内不可修改。