HTTP详解(七):Session详解(一)

来源:互联网 发布:药品质量监测网络 编辑:程序博客网 时间:2024/06/05 19:06
HTTP详解(七):Session详解(一)
首先跟大家道个歉,最近比较忙,更新的比较慢,大家见谅。(特喵的读者数又少了,心碎呀!,大家赶紧帮我推荐一波吧)
好了,废话不多说,今天我们主要是说一说Session的一些知识,我在前面的文章中曾经说过,Cookie和Session的出现,很大程度上弥补了HTTP无状态连接带来的一些不方便。上一篇文章我们已经比较细致的讲解了Cookie的·一些知识,Cookie有一个特点就是Cookie存在于客户端中,而今天说的Session则是存在于服务器中!
首先,我们先看一下Session是什么。

好了,废话不多说,今天我们主要是说一说Session的一些知识,我在前面的文章中曾经说过,Cookie和Session的出现,很大程度上弥补了HTTP无状态连接带来的一些不方便。上一篇文章我们已经比较细致的讲解了Cookie的·一些知识,Cookie有一个特点就是Cookie存在于客户端中,而今天说的Session则是存在于服务器中!

首先,我们先看一下Session是什么。

Session是如何工作的?

我们知道,Session信息是存储到服务器端的,但是不同的浏览器可能在服务器上都存储了属于自己的Session信息,但是浏览器怎么去寻找属于自己的Session呢。

就如同,我们去公安局查信息,我们只需要输入自己的身份证号就可以匹配到唯一的身份证信息。Session机制也是这样的,浏览器在访问服务器的时候,将自己的sessionid给服务器,服务器就可以根据这个ID去匹配查找Session信息。由此,我们推断出在服务器端,Session的存储机制是key=value的形式,我们可以保证key一定是sessionid,但是value的存储方式可能有很多种,在这里我们不做过多的讨论。

我以实际操作为例,我们来看一下Session的工作机制。




关于Session的工作机制,我想大家应该有一个初步的认识了吧。

说完了Session是什么,Session如何工作,我们接下来看一下,我们常用的Session实现方式有哪几种。

第一种:就是依赖于Cookie的实现,就是上面我们所说的那种,在这里我就不赘述了。

第二种:URL重写。这种实现方式,是通过在请求的URL后面后缀JESSIONID=xxx这种方式将JESSIONID传递给客户端。

第三种:隐藏的表单域。就是在FORM表单中,设置一个隐藏域,将JESSIONID放置其中,一并发送给服务器端。

当然,第一种方式是目前的主流,但是浏览器必须要支持Cookie,如果浏览器禁用Cookie,那么可以考虑第二种或第三种实现方式!

Session的缺点:

没有任何一种技术是完美无瑕的,任何一种技术都有它的优缺点,Session也不例外。据我所了解的,Session的缺点就一下几点,欢迎大家补充:

1、如果Session的实现是依赖于Cookie的话,那么浏览器必须要支持Cookie,否则歇菜。

2、过多的浏览器请求,会在服务器端创建很多的Session信息,会对浏览器造成一定的内存压力,而且不易于维护。

目前,我知道的就这两点!

好了,今天我们主要说了一下Session的一些东西,总结起来以下几点:

1、Session存在于服务器端,不同于Cookie.

2、如果Session的实现是依赖于Cookie的实现,浏览器在多次访问服务器端时,会在请求报文中的Cookie属性中添加JESSIONID=123,作为到服务器端检索属于自己的Session信息的唯一ID.

3、SESSION的实现方式有很多:有依赖与Cookie实现、URL重写实现、隐藏表单域实现!