Cookie,Session和3大域对象总结

先总体说一下关系: cookie和session属于会话技术,通俗的讲,cookie是创建数据,存入浏览器缓存,而session是在服务器端创建的域对象,它的范围是一个会话。
而其它的域对象包括 ServletContext, request,比较一下这三个域对象之间的区别
范围:
ServeltContext > session > request
ServletContext的范围是整个web项目的.
session是会话级别的.
request仅限于一次请求,比如我现在请求google,结果google直接让我转发到了bing,这也是属于一次请求的,是转发,而不是重定向喔

生命周期:
ServletContext是整个web应用的,服务器开启(web项目启动)的时候就已存在,服务器关闭之后(web项目销毁)才销毁。

session有三种销毁方式:
1 :手动调用invalidate方法销毁
2:超出会话时间,除非手动手设置,不然默认30分钟,这个可以在你Tomcat全局的web.xml配置中查到
3 : 服务器关闭,也就是web项目销毁。

request:是发出请求,如果请求被响应返回了,声明周期也就到头了.
注意,一个请求一个域,不同请求不同域

还有一个常见的误解,在浏览器关闭之后,session被认为销毁了,这是不对的,这要提及session的原理.

之所以session是会话级别的,也就是用户级别的,但是服务器如何直到你是哪个用户的session呢?
所以当有请求的时候,服务器会根据一个id ,JSESSIONID(jsessionid)来判断. 这个id可以看做是你的浏览器,当你第一次访问一个网站的时候,比如csdn, 那么 csdn 就会创建一个属于你的session域对象,这个和这个域对象一起的有这个id, csdn 会把这个id返回给你的 , 好 , 这里就很好理解了, 属于你session 的 id 实际上是存储在cookie里的, 而 cookie 也是属于 会话 级别的, 关掉浏览器之后, cookie没了, 所以id也没了, 你的session属于孤魂野鬼了,
所以 当你 再次访问csdn的时候, csdn会判断你这个session是属于那个id的, 但是你id 没了, 所以认不出来, csdn就会重新创建一个新的id,新的session对象.

可以看到其实你浏览器关了之后,是cookie销毁了,所以session的id也没了,究其原因是 cookie , 所以只要设置cookie 就好了

把当前session的id设置到cookie中去,并设置持久化时间,指定cookie范围
Cookie cookie = new Cookie(“JSESSIONID”, session.getId());
cookie.setMaxAge(60 * 60);
cookie.setPath("/SessionACookie");
resp.addCookie(cookie);

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值