会话技术:Session

本文深入解析了Session机制,探讨了服务器端会话技术的工作原理,包括Session的创建、维护及销毁过程。详细介绍了HttpSession对象的方法及其与Cookie的关系,讨论了Session在不同场景下的行为特性,如客户端关闭、服务器关闭时的处理方式,以及如何通过配置调整Session的存活时间。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、Session:是服务器端会话技术,在一次会话的多次请求间共享数据,将数据保存在服务器端的对象中的(HttpSession)。

二、HttpSession对象的方法主要就是域的三个方法:
object getAttribute(String name)
void setAtrribute(Strng name,object value)
removeAttribute(String name)
session的获取使用HttpSession request.getSeeion();进行获取就可以了。

三、问题:服务器如何确保在一次会话范围内,多次获取的Session对象是同一个对象?
Session是依赖于Cookie的,当JSP页面没有显式禁止session的时候,在打开浏览器第一次请求该jsp的时候,服务器会自动为其创建一个session,并赋予其一个sessionID,发送给客户端的浏览器。以后客户端接着请求本应用中其他资源的时候,会自动在请求头上添加:(Cookie:JSESSIONID=客户端第一次拿到的session ID)。
在每次请求时,在请求头中Cookie都会带着这个Session。使用Request获取的Session都是同一个。

在这里插入图片描述

四、细节:
1.当客户端关闭后,服务器不关闭,默认情况下两次获取的不是同一个(session依赖于Cookie,Cookie都挂了,session还能是同一个吗?)。但是如果我们期望客户端关闭之后,session也不会发生改变的话。可以使用。
Cookie cookie = new Cookie(“JSESSIONID”,session.getId());
cookie.setMaxAge(int time);
response.addCookie(cookie);

手动设置cookie持久化存活,并将服务器创建的session进行覆盖,就可以长时间使用session保存信息了。
关闭浏览器后再次访问,发现session并没有改变。
但是在关闭服务器之后,重启之后还是发生了改变。

2.服务器关闭之后获取的session获取不到同一个,即使获取到同一个地址值,也不是同一个session,只不过是因为随机生成的地址相同罢了。
但是即使不是同一个,也要想办法确保存储的数据不丢失。
session的钝化:
*在服务器正常关闭之前,将session对象系列化到硬盘上。
*在服务器重启之后,将session文件转化为内存中的session对象即可。
tomact已经自动完成了这一步。 (不用你管)
3.session什么时候被销毁?
1.服务器关闭
2.session对象调用invalidate()。
3.session的默认失效时间是30分钟。
但是我们可以手动配置
在tomcat的conf目录下有一个web.xml,在其中有个一个子元素
在这里插入图片描述
可以看到其默认为30,可以对其进行修改。但是这样修改之后,所有发布在本地服务器上的web项目中的session的存活时间都会发生改变。
如果只是想单独改变一个web项目的,可以在web项目的web.xml进行配置

  <session-config>
    <session-timeout>配置时间(分钟)</session-timeout>
</session-config>

五、session的特点:1.用于存储一次会话多次请求见的数据,存储在服务器端。
2.session可以存储任意类型任意大小的数据。

session与Cookie的区别:session存储数据在服务器端。Cookie存储在客户端。
session没有数据大小限制,Cookie有。
session数据安全,Cookie因为存储在客户端,数据相对不太安全。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值