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

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

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

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

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

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

  首次创建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,想必每个测试工程师都应该听过自家的开发对自己说过这句话:“你把缓存清了在试试....”,哈哈哈~~

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

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

http之Session&Cookie的更多相关文章

  1. session & cookie(li)

    Session & Cookie 一.定义 Session,用户在浏览某个网站时,从进入网站到浏览器关闭所经过的这段时间,也就是用户浏览这个网站所花费的时间.Cookie,由服务器端生成,发送 ...

  2. web也是区分前端与后端的,session\cookie辨析

    <1>Ajax交互方式 Ext.Ajax.request( { //被用来向服务器发起请求默认的url url : "", //请求时发送后台的参数,既可以是Json对 ...

  3. 浅析session&cookie

    session&cookie没有出现的黑暗时代 大家都知道,HTTP协议是一种无状态的协议,本次请求下一次请求没有任何的关联,所有没有办法直接用http协议来记住用户的信息,试想一向,每一次点 ...

  4. Asp.net MVC使用Model Binding解除Session, Cookie等依赖

    上篇文章"Asp.net MVC使用Filter解除Session, Cookie等依赖"介绍了如何使用Filter来解除对于Session, Cookie的依赖.其实这个也可以通 ...

  5. Asp.net MVC使用Filter解除Session, Cookie等依赖

    本文,介绍了Filter在MVC请求的生命周期中的作用和角色,以及Filter的一些常用应用场景. 同时针对MVC中的对于Session,Cookie等的依赖,如何使用Filter解依赖. 如果大家有 ...

  6. [转]Asp.net MVC使用Filter解除Session, Cookie等依赖

    本文转自:http://www.cnblogs.com/JustRun1983/p/3279139.html 本文,介绍了Filter在MVC请求的生命周期中的作用和角色,以及Filter的一些常用应 ...

  7. [转载]JavaEE学习篇之——Session&&Cookie

    原文链接: http://blog.csdn.net/jiangwei0910410003/article/details/23337043 今天继续来看看JavaWeb的相关知识,这篇文章主要来讲一 ...

  8. Redis+Django(Session,Cookie)的用户系统

    一.Django authentication django authentication提供了一个便利的user api接口,无论在py中 request.user,参见Request and re ...

  9. Asp.net 服务器Application,Session,Cookie,ViewState和Cache区别

    2.8 Context 的使用Context 对象包含与当前页面相关的信息,提供对整个上下文的访问,包括请求.响应.以及上文中的Session 和Application 等信息.可以使用此对象在网页之 ...

随机推荐

  1. js屏幕尺寸 笔记

    "屏幕分辨率为:"+screen.width+"*"+screen.height "屏幕可用大小:"+screen.availWidth+& ...

  2. CSS实现背景透明,文字不透明,兼容所有浏览器

    11.11是公司成立的日子,16岁啦,我呢3岁半,感谢公司给了这样一个平台,让我得以学习和成长,这里祝愿公司发展越来越好~ 进入主题,每年11月11号是光棍节,产生于校园,本来只是一流传于年轻人的娱乐 ...

  3. setTimeout使用闭包功能,实现定时打印数值

    我们这次使用setTimeout来实现一个按照时间定时,依次打印数值的例子.其实在早期的时候,也是我经常犯的一个错误,或者实现这种能力,似乎js比较牵强,其实是我的错,哈哈!没能理解JS强大之处.我们 ...

  4. thinkphp设置session有效时间

    thinkphp的框架文件 ThinkPHP/Common/functions.php function session(){ 在这个方法中找到 thinkphp .1版 if(isset($name ...

  5. github入门教程

    1.下载git windows 客户端 https://git-for-windows.github.io/ 2.配置github 安装windows客户端以后,在里面输入如下命令 首先在本地创建ss ...

  6. sublime代码片段

    创建方法:Tools > New Snippet 这时你会看到如下示例代码: <snippet>      <content><![CDATA[ Hello, ${ ...

  7. HBase如何选取split point

    hbase region split操作的一些细节,具体split步骤很多文档都有说明,本文主要关注regionserver如何选取split point 首先推荐web ui查看hbase regi ...

  8. 【原】iOS学习47之第三方-FMDB

    将 CocoaPods 安装后,按照 CocoaPods 的使用说明就可以将 FMDB 第三方集成到工程中,具体请看博客iOS学习46之第三方CocoaPods的安装和使用(通用方法) 1. FMDB ...

  9. ibatis #于 $区别

    系统框架用ibatis,开发中ibatis配置文件中执行order by #orderByClause# ,怎么搞都没有效果, 后面改成 order by $orderByClause$,OK,问题解 ...

  10. Javascript初学篇章_4(循环与函数)

    七.循环语句 1.While 语法: while (exp){ //statements; } 说明: while (变量<=结束值){ 需执行的代码 } 例: var i=0; while(i ...