session学习杂记

【1】前提

Cookie的不足:
- Cookie是纯文本的,使用起来不安全。

- 浏览器每次访问服务器都需要带着Cookie,无形中增加浏览器的流量。

- 浏览器对Cookie的数量和大小都有不同的限制,所以我们不能再Cookie中保存大量的信息。

【2】session介绍

- HttpSession用来保存当前浏览器的会话的信息,每一次会话都对应一个session对象
- 一个浏览器对应一个Session对象,不同浏览器之间不会共享Session
- Session的默认有效时间是一次会话,一旦关闭浏览器以后Session对象将失效
- 每一个Session都有一个唯一的ID,我们只需要将ID交给浏览器,就可以通过ID来找到浏览器对应的那个Session对象
- 当服务器创建一个新的HttpSession对象时,会将session的id以Cookie的形式发送给浏览器:
- 当浏览器再次访问服务器是,会以Cookie的形式带着Session的ID,服务器会去检查ID,并根据ID获取到HttpSession对象
- Session在服务器内部是保存到一个叫做SessionMap的集合中,这个map的key是Session的ID,值就是Session对象
> 工作机制
- Session对象是在request.getSession()方法第一次被调用时创建
- 在第一次访问JSP时,也会创建一个Session对象,因为在JSP对应的java文件中,已经调用过该方法了

【3】UUID

UUID:是一个32位的唯一标识符,UUID是根据机器码以及时间戳生成的,所以UUID是全世界的一个唯一的标识符
String uuid = UUID.randomUUID().toString();

【4】Session对象的有效时间

 Session对象的默认有效时间是一次会话,这里并不是因为Session对象被销毁了,而是浏览器保存的JSESSIONID的这个Cookie丢失了
(1)我们可以在总的web.xml文件中配置Session对象的最大闲置时间
<session-config>
		<session-timeout>30</session-timeout>
</session-config>
(2 )通过setMaxInactiveInterval来设置有效时间
//当传一个大于0的数时,session的最大闲置时间会被设置为相应的秒数
//当传一个等于0的数时,代表当前Session对象永远有效
//当传一个小于0的数时,session对象会永远有效,所以尽量不给他设置负值
使Session立即失效 session.invalidate();

【5】URL重写

如果浏览器禁用了Cookie,那么浏览器将不会保存JSESSIONID这个Cookie,但是我们可以通过地址栏来传递Cookie的信息
response.encodeRedirectURL("绝对路径")
response.encodeURL("绝对路径")
这两个方法来重写URL地址,这两个方法,当浏览器不支持Cookie时会自动的在地址后边加上Cookie的信息

【6】session的活化和钝化

将一个HttpSession对象序列化到硬盘中我们称为Session的钝化。
将写入硬盘中HttpSession对象反序列化到内存中的过程我们成为Session的活化。
一般情况下,当服务器停止时,Session对象会被写入到硬盘中,然后当服务器再次启动时,会自动将硬盘中的对象加载进内存。
>>  如果希望Session域中的属性可以和Session一起钝化到磁盘中,那这些属性必须实现java.io.Serializable接口
>> 当访问服务器的用户过多时,会有非常多的会话产生,这些会话,每一个会话都会对应一个HttpSession对象
这时在服务器的内存会存在大量的Session对象,但是这些对象并不是都在使用中,
所以我们希望将这些不使用的Session对象钝化到硬盘中,当这些对象再次使用时,在活化进内存
>>在Tomcat的配置文件conf/context.xml文件的根标签中加入如下代码
<Manager className="org.apache.catalina.session.PersistentManager" maxIdleSwap="1">
	<Store className="org.apache.catalina.session.FileStore" directory="mySession" />
</Manager>
maxIdleSwap属性:指的Session闲置时间,当闲置一定时间以后,会自动钝化到硬盘中
directory属性:Session钝化后的目标文件夹
 




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值