Session机制

  • 会话的英文单词是session

  • 用户打开浏览器,进行一系列操作,最后关闭浏览器,这是一次会话(一次会话对应n次请求)

  • 会话在服务器端有一个对应的java对象,这个java对象叫做:session

  • 在Servlet中,session对应的类名:HttpSession(jakarta.servlet.http.HttpSession)

  • session对象的主要作用:保存会话状态(用户登录成功,这是一种登录成功的状态,这需要session来保留会话状态)

  • 保存会话状态的原因

  • HTTP是一种无状态协议

  • 无状态 :请求的时候,B和S是连接的,但请求结束过后,连接就断开了(这样的瞬间连接与瞬间断开,会降低服务器的压力)

  • B和S断开了,那么关闭浏览器的这个动作,服务器知道吗?

  • 不知道,服务器是不知道浏览器的关闭动作(这里指的是网页安全返回退回和直接关闭浏览器)

  • 为什么不使用request保存session会话状态(生命周期很奇妙)

  • request无法保存session会话状态,因为request生命周期相较于太短

  • ServletContext对是服务器启动时创建,在服务器关闭时销毁

  • 请求域(request)< 会话域(session)< 应用域(servletcontext)

  • session超时机制

  • 当浏览器关闭时,服务器并不知晓,自然服务器端的session对象也并不会马上销毁,所以采用超时机制,在一定时间内没有对此session对象有请求时,才会被销毁

<!--    session超时30分钟后,会被销毁-->
    <session-config>
        <session-timeout>30</session-timeout>
    </session-config>
  • 获取session对象

  • HTTPSession session=request.getSession();[若当前session获取不到,则会新建一个对应的session]

  • HTTPSession session=request.getSession(false);[若当前session获取不到,则也不会新建,返回null]

  • Session的实现原理

  • 在web服务器中有个session列表,类似map集合

  • 这个map集合的key存储的时sessionID

  • 这个map集合的value存储的是对应的session对象

  • 当用户打开浏览器时,获取session对象时,会通过存储在浏览器上sessionID(浏览器上的缓存)查找服务器的session,若未找到,则在服务端中新建一个对应的session对象

  • sessionID是以cookie的形式保存在浏览器

  • 若cookie禁用?

  • url重写机制:在原先url后面加上;jsession=...或者在后端代码地址后面编写动态地址

  • 浏览器关闭后,会话结束

  • 若关闭浏览器,则浏览器上的缓存会被清除,但session还存在,因为http是无状态协议,服务器是不知道浏览器已经被关闭了,同时呢,session对象也不会被销毁,而是通过服务器关闭或是通过session超时机制被销毁。

  • 若浏览器安全退出,浏览器会向服务器发送一次请求,服务器收到请求,会立马销毁对应的session对象。

  • 总结目前所学的域

  • 请求域(request 对应类名:HttpServletRequest)(请求级别)

  • 会话域(session 对应类名:HttpSession)(用户级别)

  • 应用域(application 对应类名:ServletContext)(项目级别,所有用户共享的)

  • 三个域的大小关系:request < session < application

  • 三个域都有各自的公共方法:

  • setAttribute(向域当中绑定数据)

  • getAttribute(向域当中获取数据)

  • removeAttribute(删除域当中的数据)

  • 使用原则:尽量使用小的域

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值