http之Session&Cookie

  百度了一波session与Cookie,我发现这东西远比我想象中更复杂(可能是因为我不明白底层的运行原理)。网上也是一堆的关于Session与Cookie区别/联系的文章,然而,我看完了还是一脸懵逼的状态,所以自己动手写写对http之session&cookie的简单了解。走过路过的各位dalao,欢迎拍砖斧正……

  前置条件:只有验证通过之后才能访问网站(可以理解为只有登录之后才能正常使用网站)

  因为http协议是无状态的,所以服务器是不可能知道在上一次http请求中,我通过了验证。这种情况如何解决呢?

  可以做成每个网页都有用户名和密码的验证(不过,我想也没几个人愿意访问一个网页就输一次用户名密码),这种方法也会对服务器造成很大负担(因为每个Request都需要到数据库中去验证)。

  其次,可以选择在服务器端或客户端保存一些代表自己身份的信息,每次请求带上一个能代表自己身份的“铭牌”就行了,所有就有了Session与cookie。

  当浏览器向服务器发送一个请求时,如果需要创建Session时(什么时候需要,什么时候不需要,看文章下方斜体<补充>),服务器会为浏览器窗口创建一个独一无二的Session内存(其中包含一个唯一的Session id)。

http之Session&Cookie

  首次创建Session的时候,服务端会在http协议中告知客户端,需要在Cookie中记录一个Session id,以后每次发送请求的时候,带上Session id,我就知道你是谁了。

(PS:如果客户端禁用Cookie,咋整?一般这种情况下,可以通过使用URL重写,将Session id作为参数传递,来跟踪会话。即每次http交互,URL后面都会附加一个诸如sid=xxx这样的参数,使得服务端可以根据它来跟踪用户。)

Cookie:是浏览器保存信息的一种方式,可以理解为一个文件,保存在客户端。服务器可以通过响应浏览器的set-cookie标头,设置Cookie的信息。只允许创建txt的文本文件(客户端可以阻止服务端写入,还可以删除)

-------------------------------------------------

Cookie是有时间限制的,根据生命期不同分成两种:

会话Cookie:生命期为浏览会话期的Cookie。如果不设置过期时间,则表示这个Cookie生命周期为从创建到浏览器关闭止,只要关闭浏览器窗口,Cookie就消失了。会话Cookie一般不保存在硬盘上而是保存在内存里。

持久Cookie:如果设置了过期时间(setMaxAge(606024)),浏览器就会把cookie保存到硬盘上,关闭后再次打开浏览器,这些Cookie依然有效直到超过设定的过期时间。存储在硬盘上的Cookie可以在不同的浏览器进程间共享,比如两个IE窗口。而对于保存在内存的Cookie,不同的浏览器有不同的处理方式。

                                        ----------------------------------

Session:百度一波翻译,会话的意思。原本所表达的含义是指有始有终的一系列动作/消息。当它与网络协议相关联的时候,通常表示“面向连接”(指的是通信双方在通信之前要创建一个通信的渠道)或“保持状态”(指通信的一方能够把一系列的消息关联起来,使得消息之间能够互相依赖,例一个服务员能够认出再次光临的顾客且记得上次这个顾客还欠店里一份饭钱)两个含义,我这里说的Session,是服务器端的一种机制,使用类似于散列表的结构来保存信息。Session通过Cookie,在客户端保存Session id,而将用户的其他会话消息保存在服务端的Session对象中。与此相对的,Cookie需要将所有信息都保存在客户端。因此Cookie存在着一定的安全隐患,例如本地Cookie中保存的用户名密码被破译,或cookie被其他网站收集。

  补充为某个客户端的请求创建一个Session的时候,服务器会首先检查这个客户端的请求里是否包含了一个Session标识(即Session id)。如果已经包含一个Session id则说明以前已经为此客户创建过Session,服务器就按Session id把这个Session检索出来使用(如果检索不到,可能会新建一个,这种情况可能出现在服务端已经删除了该用户对应的Session对象,但用户人为地在请求的URL后面附加上一个Jsession的参数)。如果客户端请求中不包含Session id,则为此客户端创建一个Session并且同时生成一个与之相关联的Session id,这个Session id将在本次响应中返回给客户端保存。

  其实还有很多要写的、但是发现自己越写越混乱(⊙﹏⊙)、暂时就这样吧,由于代码能力有限,无奈之下只能用纯文字说明了。写在这,权当自己做笔记了.....

PS:之前自己折腾了一下LoadRunner的脚本关联,发现登录需要关联的参数一般是Session id,就对Session产生了点兴趣。至于Cookie,想必每个测试工程师都应该听过自家的开发对自己说过这句话:“你把缓存清了在试试....”,哈哈哈~~

  这是我第一篇笔记,开始自己的学习之路吧。吼吼~~~

__努力可能比较累,但是心安....

上一篇:JavaWeb学习篇之----Session&&Cookie


下一篇:saltstack之(五)数据系统Grains和Pillar