笔记 | Session相关

Session会话对象

Session是什么

  • Session 是Jsp的九大内置对象之一,四大域对象之一,会话对象之一。
  • Jsp九大内置对象:
    • 【request,response,out,session,pageContext,application,page,config,exception】
  • Jsp四大域对象:
    • 【pageContext,request,session,appliction】

Session的工作原理

  • 浏览器【第一次】向服务器发送请求
  • 服务器接收到请求后,创建一个Session对象,同时创建一个特殊的Cookie对象【Cookie的name是固定的,为JSESSIONID,Cookie的value是Session的id】,并将Cookie发送给浏览器。
  • 以后浏览器再次向服务器发送请求,就会携带特殊的Cookie
  • 服务器通过Cookie找到对应的session,从而区分不同浏览器
    Session工作原理
    工作原理扩展
  • 浏览器不是第一次访问服务器【jsp或者servlet不是第一次通过request.getSession()获取session对象】
  • 服务器会优先获取已创建的session对象:通过特殊的Cookie【JESSIONID】
  • 如果JESSIONID不存在,那么就无法找到Session对象。服务器就会重新创建Session对象和特殊的Cookie,发送给浏览器
  • 如果JESSIONID存在,会判断Session是否存活【tomcat默认存活30min】
    • 如果session在有效时间[空闲时间],则可以直接使用
    • 如果session不在有效时间[空闲时间],则服务器就会重新创建Session对象和特殊的Cookie,发送给浏览器

Session的使用

  • Session的创建
    - 第一次调用request.getSession()时,服务器创建Session对象。
    - jsp的本质上也是调用(HttpServletRequest)request.getSession()时,创建Session对象。
  • Session的获取
    - jsp:内置对象 直接使用
    - html:通过servlet:request.getSession();
  • Session的修改
    - session.setAttribute(String key,Object value);
    - Object obj = session.getAttribute(String key);
    - session.removeAttribute(String key);

Session的有效时间

默认Session存活30分钟
在Tomcat----->conf----->web.xml 可以看到默认设置

 <!-- ==================== Default Session Configuration ================= -->
  <!-- You can set the default session timeout (in minutes) for all newly   -->
  <!-- created sessions by modifying the value below.                       -->

    <session-config>
        <session-timeout>30</session-timeout>
    </session-config>
Session空闲时间设置[非活动时间]

全局设置

  • 在项目的web.xml中配置
    <session-config> <session-timeout>30</session-timeout> </session-config>

局部设置

  • 使用session.setMaxInactiveInterval(int seconds)
  • 入参>0:设置当前session的空闲时间为seconds秒
  • 入参<=0:永不失效

Session的持久化

  • 思路:
    • 先持久化特殊的Cookie 【name=JESSIONID 】
    • 再持久化Session对象 【如果持久化的时间<=30min 则可以省略该步骤】

Session对象的销毁

  • session对象空闲时间达到了设置的最大值
  • session对象被强制失效【session.invalidate();】
  • web应用卸载
  • 服务器进程停止

Session钝化与活化

  • 为什么说会话与浏览器有关,与服务器无关?
  • 明明session是由服务器创建的,却说与服务器无关,这不是自相矛盾吗?
  • 这是因为session的钝化活化机制导致的:因为session的钝化活化机制,使得会话看起来与服务器无关。
  • 什么是session的钝化?
    • session在一段时间内没有被使用或是关闭服务器时,就会将session对象以及对象中的数据序列化到磁盘中,这个从内存保存到磁盘的过程,就称之为序列化。序列化的数据需要支持实现Serializable接口。
  • 什么是session的活化?
    • session被钝化后,服务器再次调用session对象或者重启打开服务器时,将session对象以及对象中的数据从磁盘中序列化到内存的过程,称为活化。

表单重复提交问题

  • 危害:重复提交已付款的表单,付一次钱下多个订单。
  • 解决方式:
    • 生成一个不可重复的uuid
    • 提交表单前,将uuid存入session与对象和表单的隐藏域中
    • 发送提交表单请求
    • 后端进行判断:分别获取隐藏域和session域的uuid比较
      • 相等,则提交表单,并删除session中的uuid
      • 不相等,则不提交表单
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值