Servlet自学第23讲:Session会话技术详解

Session会话技术相关知识

  1. Session是存在服务器的内存中的。
  2. 一个用户浏览器,独享一个session对象。
  3. Session中的属性的默认生命周期是30min。有三种方式修改它的生命周期,第一种修改方式对所有web应用都有效,即
    tomcat/conf/web.xml中
<session-config>
<session-timeout>30</session-timeout>
</session-config>

第二种修改方式对单个web应用有作用:

<session-config>
<session-timeout>10</session-timeout>
</session-config>

只对本web应用生效
如果两个配置文件冲突,就以单个web应用的配置为准。
还可以在程序中修改session的生命周期(与Cookie的生命周期计算方式不一样):

session.setMaxInactiveInterval(600); //以秒为单位

对Session生命周期的详解:
这里写图片描述
(费资源的两个操作:网络和数据库)

Session实现原理

服务器为什么能为不同的浏览器设置不同的session:
这里写图片描述
第一次访问有创建session对象的servlet时,为该浏览器用户创建有sessionID标识的唯一session对象,并将该sessionID存储到浏览器cookie中,之后用该浏览器访问该servlet时,会把含有sessionID的cookie附加到http请求中,在服务器内存中找到相应的session而不是再次创建。

Session知识扩展

我们知道关闭浏览器后对应的session也会被销毁,那么如何实现即使关闭浏览器还能访问该session中的内容的呢?

首先思考一下这样一个问题,关闭浏览器后,session还在吗?答案是还在的,因为对session是由服务器管理的,确定session的生命周期后,该session不会随浏览器的关闭而销毁的,而是等到session生命周期后才会销毁。

这里常会有这样的一个面试题:关掉IE再打开IE上次购买的商品还在。–>涉及session的销毁时间。

如果是自己实现的话可以这样做:手动获取服务器创建的session ID,在把session的ID保存到浏览器的cookie中。(注意,session 的id不能自定义,而是读取cookie的默认ID(JSESSIONID))

Cookie禁用后还能使用Session

Cookie跟session有千丝万缕的关系,cookie要讲session id附加到请求中。禁用Cookie则也不能访问session。但是能不能做到禁用cookie也能使用session呢?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值