Session

====理论====
session描述
最原始的session是服务器端的一个Map结构的存储空间,但经常用的是HttpSession。
放入session的值可以在程序中的任何jsp,java类中进行读取。通常会将用户对象存入session,
session的内容不宜过多,有必要全局记录的数据,就可以放入session中进行存储。
多数量访问,session的存活时间不能太长,因为session是存活于服务器端的,占用资源。

Cookie和Session的区别
Session是存储于服务器端的,由服务器去销毁和创建
Cookie是存储于客户端的,可以由服务器端去销毁和创建也可以客户端去销毁
Cookie可以和Session一样,浏览器关闭时销毁
Session也可以和Cookie一样,保存长时间,只要SessionID不丢,Session的存活时间够长就可以实现。
Session是可以存储Object value的Map,而Cookie只能存储String value。
Session是单例的,Cookie就很随意了,但是request中中的Cookie数组只有一个。

session的创建
session是单例的,如果存在一个session,则不会再创建session。否则创建出一个session并生成一个sessionid并保存到Cookie中。
所以如果创建了session,就会创建一个叫JSESSIONID的cookie,其值为SessionID,保存在了客户端。只要创建了session,那么Cookie
的数量就至少为1.且存储SessionID的这个Cookie的MaxAge为-1,表示浏览器关闭,Cookie就被删除。
request.getSession();只要执行这句代码,就会创建session对象,如果存在,就指向对象。SessionID是不会变的。


jsp中的session
jsp中均可以访问session,因为jsp中翻译成servlet时,会隐式的加上HttpSession session = request.getSession(true);
所以在jsp中session是一个隐含的对象。所以只要第一次访问jsp就会创建一个session。


session存活时间限制
在web.xml中可以进行配置
<session-config>
    <session-timeout>30</session-timeout>
</session-config>
<!--单位为分钟,如果为负数或0,表示不限制session-->

session的销毁
session的销毁原因归根结底是超时,长时间不使用就会被服务器销毁。
1,关闭浏览器(其本质还是超时)
  因为保存SessionID的这个Cookie的MaxAge为-1,所以浏览器关闭后,Cookie就被删除了,所以SessionID就会丢失。
  丢失后Session无法获取,获取不到就无法使用就会被倒计时,然后销毁。
  根据这个原理,可以 实现浏览器关闭后继续使用原来的session。可以将保存SessionID的Cookie的MaxAge搞大点。单位是秒。
  注意的是,记得要重新response.addCookie(Cookie);否则更改了MaxAge也是无效的。
2,超时,这是根本原因。
 


====应用====
session的添加和删除属性
session.setAttribute("key",Object value);添加属性
session.removeAttribute("key");删除属性
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值