Java Web 会话保留技术

正如我们所知,客户端和浏览器之间的通信是基于HTTP协议的,而HTTP协议是一个无连接、无状态的协议,这个无连接、无状态既是HTTP的优点也是缺点,详见http://blog.csdn.net/fengyinchao/article/details/50774738,那现在对于服务器来说就需要知道这个请求是这个客户端的第一次请求还是第n次,比如拿一个登录的例子来说,对一个客户端发起的请求,我们需要知道这个请求的对象是否处于登录状态,若处于登录状态,那登录的用户又是谁?这些都是我们所关心的,而我们每次都把用户的信息通过POST的方式传入到服务器,让服务其根据客户端提供的信息再去查找该用户对象,显然易见,这种方式是不合理的(每次传入的信息多,每次传给服务器后服务器都要去链接数据库查询会导致等待时间加长,用户体感变差),所以我们就希望客户端和服务器的链接是有状态的,而这显然不符合HTTP协议。就在此时,聪明的人就想出会话保留技术——cookie 和 session。

cookie是将一些必要的信息存于http协议中头文件中,而cookie是明文传输的,所以极易造成信息泄露的风险,而且cookie是存于客户端的,每次发送请求时都会将cookie中的信息连带发送给服务器。这样看来,仅仅是使用cookie根本达不到我们想要的减少http协议中的信息量和减少服务器的查询次数的目的。若要达到这个目的,则还需要借助session的技术。与cookie不同,session是存在于服务器中,那对于服务器来说,就可以存储想要的信息不会受限于客户端的各个方面的限制,例如运行环境。在Java Web相关的服务器中就可以存储用户这个对象。说到这里,我们就可以来探讨一下JavaWeb中的会话保留技术了。

当一个客户端第一次发起一个请求(这边有个问题,HTTP协议是无状态的,他怎么知道这是客户端发出的请求),服务器在收到请求后,会在服务器中会为这个客户端新建一个session用于存储和这个客户端相关的一些信息,在向客户端发送回应的时候,会给客户端一个cookie——Jsession:一串字符;这串字符其实是指这个session的id,那么在这个客户端再次发送器请的时候,服务器就可以根据Jsession来寻找这个session的对象,从而达到“有状态”这个诉求。现在再反过来看,就不难理解服务器端是如何分辨是否是第一次请求,因为第一次请求中是没有Jsession这个cookie的,且我猜测,在服务器端是通过一个Map的形式来维持这个sessionId和session对象间的关系,从而达到快速查找的目的。而对于我们原始的目的减少发送的信息量和提高查询的速度是完美达到了,切也避免了cookie明文传送带来的不安全的隐患,毕竟就算有人获得这个cookie也搞不明白这个信息的含义。

最后对于生命周期这个我也没有特别的欲望想去说明,详见SESSION的生命周期等。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值