Session的工作原理

session是服务器端的一个集合,可以存储任何东西。session最重要的特性,是可以识别客户。

1.Session的工作原理

当我们的Servlet需要使用Session时,执行下面的代码

HttpSession session = request.getSession();//取出session
session.setAttribute("goods1","Scoat");//session存数据
session.getAttribute("goods1");//session取数据

如果是第一次取session,服务器会创建一个session对象(session本身是一个map集合),并且存入服务器的session集合中以sessionId为标识键,也就是根据sessionId即可取到对应session的引用。同时使用session Servlet还获得了一个sessionId,在响应时把这个sessionId以cookie的形式发给了客户端。如果客户访问其它同一域的Servlet,这个sessionId会跟着请求上传到服务器。那么如果请求的另一个Servlet也要使用session,会先检查有没有这个保存sessionId的Cookie,如果有则直接到session集合中取对应的session引用返回给要使用的Servlet,所以,只要客户端存在这个sessionId,不管请求哪个Servlet,都可以拿到同一个session。所以Session就可以给不同的请求存储数据。

2.Session过期

要保证session能够跨请求存储数据必须保证下面两个条件必须满足

(1).客户浏览器不能关闭

因为session会给客户保存一个sessionId,这个id是作为临时cookie存在客户浏览器缓存当中,如果关闭浏览器,缓存就没了,sessionId自然也就消失了。重新打开浏览再请求,就是一个全新的请求,服务器会创建一个新的session,之前的session就没法用了。

(2).请求不能超过session的过期时间

服务器的session如果始终没有使用,保留着就是浪费服务器的资源,所以服务器会定期检查session的最后访问时间,如果这个时间超出session设置的过期时间,服务器就会销毁这个session,那么客户端即使把sessionId又传上来,服务器也找不到它的session了,只会再重新创建一个新的session。

3.Session生命周期的操作方法

session.setMaxInactiveInterval(20 *  60);//设置session过期时间
session.invalidate();//销毁session的方法
session.getCreationTime();//获得session的创建时间
session.getLastAccessedTime();//获得session最后一次被使用的时间
  • 19
    点赞
  • 76
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值