HttpSession理解 .

 

Session是J2EE协议中五个对象之一,其它四个为Request, Response,  Cookie, Application。下面对session做一个说明。

       Session在服务器中产生,由web服务器维护其生命周期,例如Tomcat, JBoss, Weblogic等,它们都实现了J2EE协议,虽然在创建session时,略有差别但是都遵循J2EE协议。下面从J2EE协议的角度说明。

      Session对象,是为了维护一次会话的状态,保证本次会话不会与其它会话冲突。所谓会话,是客户端通过请求服务器,服务器返回给客户端,到此一个会话建立,之后这个会话下的所有操作都将共享该Session对象。比如:我们登陆淘宝网,请注意如果此时我们没有使用session,该session对象是不会产生的。当然这里有两种情况,如果是淘宝网要在session中记录一些信息,session就产生了,此时我们输入自己的基本登陆信息,就可以共享该session。如果是我们登陆的时候使用session,那么当登陆完成后,在淘宝网界面的所有操作都可以共享该session记录一些信息。最常见的是购物车,我们可以利用该session,保存自己的购物信息,这样结算的时候看到的就是自己购买的物品,当然其他用户访问的时候会用他自己的session不会和咱们的session冲突。


      网上好多人说,只要关闭浏览器session就会消失,这是完全错误的,session是由服务器产生,生命周期由服务器维护,我们可以自己定义session的失效时间。到时间后服务器会清理将其销毁。


      说到这里不得不说下sessionid这是唯一标识session对象的东西,通过该值服务器可以找到对应的session,请注意是服务器去找session而不是客户端,诸如浏览器之类的。sessionid是服务器产生的,其保存方式一般是写到cookie中,以键/值对的方式。Key=JSESSIONID,VALUE=SESSIONID。


      既然提到了cookie,那么就说明session和cookie的区别及联系。这本就是两个对象,cookie对象是服务器端产生,但是却保存在客户端的一个小文本中,这就是常说的cookie是一小段保存在客户端的文本。正是有了cookie我们可以在访问网站的时候不需要拼接sessionid,其原理如下:

   1、http请求服务,创建session
      2、返回给浏览器,其中有cookie信息,cookie中有sessionid信息
      3、浏览器接受到cookie信息,将其写到某个目录的文本中
      4、不关闭浏览器,再次http请求,此时浏览器会将sessionid发送给服务器
      5、服务器拿到sessionid,从其request的session对象队列中找到与该sessionid一直的session对象,使用该session工作。
   
    如果禁用cookie,那么我们需要每次都传递sessionId,所谓的Url重写,格式如下:

   
http://localhost:8080/projectName;jsessionid=cj13nd83rn;dfl
    此时服务器会解析该url找到sessionid然后拿该sessionid去request的session队列中找到该sessionid对应的session
    如果我们不重写url那么会出现无法使用我们session的问题。

    例如:我们访问163邮箱,首先不禁止cookie登陆  进去,此时点击里面的收件箱没有问题,因为我们使用的是自己的session,然后禁止cookie,此时点击收件箱会提示您的状态已经过期,不是session销毁了,而是无法找到一个匹配的session因此拿不到我们的基本信息而给出提示。如下图注意红色提示:

 


   
   

但是开启cookie的同时,如果我们拼接sessionid,如果cookie中有sessionid,那么服务器会将cookie中的sessionid覆盖重写的sessionid,此时会使用覆盖的sessionid去request的session队列中找到与之对应的session自然不是我们要的session。原理如下图:


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值