http之Session&Cookie
百度了一波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的更多相关文章
- session & cookie(li)
Session & Cookie 一.定义 Session,用户在浏览某个网站时,从进入网站到浏览器关闭所经过的这段时间,也就是用户浏览这个网站所花费的时间.Cookie,由服务器端生成,发送 ...
- web也是区分前端与后端的,session\cookie辨析
<1>Ajax交互方式 Ext.Ajax.request( { //被用来向服务器发起请求默认的url url : "", //请求时发送后台的参数,既可以是Json对 ...
- 浅析session&cookie
session&cookie没有出现的黑暗时代 大家都知道,HTTP协议是一种无状态的协议,本次请求下一次请求没有任何的关联,所有没有办法直接用http协议来记住用户的信息,试想一向,每一次点 ...
- Asp.net MVC使用Model Binding解除Session, Cookie等依赖
上篇文章"Asp.net MVC使用Filter解除Session, Cookie等依赖"介绍了如何使用Filter来解除对于Session, Cookie的依赖.其实这个也可以通 ...
- Asp.net MVC使用Filter解除Session, Cookie等依赖
本文,介绍了Filter在MVC请求的生命周期中的作用和角色,以及Filter的一些常用应用场景. 同时针对MVC中的对于Session,Cookie等的依赖,如何使用Filter解依赖. 如果大家有 ...
- [转]Asp.net MVC使用Filter解除Session, Cookie等依赖
本文转自:http://www.cnblogs.com/JustRun1983/p/3279139.html 本文,介绍了Filter在MVC请求的生命周期中的作用和角色,以及Filter的一些常用应 ...
- [转载]JavaEE学习篇之——Session&&Cookie
原文链接: http://blog.csdn.net/jiangwei0910410003/article/details/23337043 今天继续来看看JavaWeb的相关知识,这篇文章主要来讲一 ...
- Redis+Django(Session,Cookie)的用户系统
一.Django authentication django authentication提供了一个便利的user api接口,无论在py中 request.user,参见Request and re ...
- Asp.net 服务器Application,Session,Cookie,ViewState和Cache区别
2.8 Context 的使用Context 对象包含与当前页面相关的信息,提供对整个上下文的访问,包括请求.响应.以及上文中的Session 和Application 等信息.可以使用此对象在网页之 ...
随机推荐
- 【XLL 框架库函数】 TempInt/TempInt12
创建一个包含了 integer 的 XLOPER/XLOPER12 原型 LPXLOPER TempInt(short int i); LPXLOPER12 TempInt12(int i); 参数 ...
- css垂直居中 两种方法
在前端面试的时候我们经常会被问道怎样使一个元素在页面垂直居中呢,这也是一个老生常谈的问题了. 解决的方法基本都是使用定位来实现 div{display: fixed;left: 50%;top: 50 ...
- 网络知识学习2---(IP地址、子网掩码)(学习还不深入,待完善)
紧接着:网络知识学习1 1.IP地址 IP包头的结构如图 A.B.C网络类别的IP地址范围(图表) A.B.C不同的分配网络数和主机的方式(A是前8个IP地址代表网络,后24个代表主机:B是16 ...
- VS2012下X64平台嵌入汇编程序
VS2012在win32平台编译的时候可以很好的支持汇编语言的嵌入.建立一个控制台应用程序,选择空项目.项目建立好之后添加一个.cpp文件.在cpp文件中写入如下代码: #include <io ...
- 关于POI解析Excel文件(03和07版本不同)的问题
问题描述:在使用poi包进行excel解析时,发现对Excel2003以前(包括2003)的版本没有问题,但读取Excel2007时发生如下异常:org.apache.poi.poifs.filesy ...
- Linux学习笔记(3)-常用命令
江湖传言,Linux和Windows不同,他主要的用途是在一些服务器,或者片内系统上,所以人机交互界面自然就没有Windows那么漂亮,其实也没有那个必要. 所以,学习Linux的第一步,就是学习他那 ...
- InstallShield Limited Edition制作安装文件
由于InstallShield Limited Edition for Visual Studio的教程.资料太少,所以我今天才决定写这个文章,专门针对C#项目打包,包括打包集成Microsoft . ...
- zorka源码解读之Beanshell与zorka的交互实现
一.beanshell基础知识从应用程序中调用BeanShell创建一个BeanShell的解释器(interpreter)用eval()和source()命令可以对一个字符串求值和运行一个脚本文件使 ...
- Swagger - 前后端分离后的契约
前后端分离 按照现在的趋势,前后端分离几乎已经是业界对开发和部署方式所达成的一种共识.所谓的前后端分离,并不是传统行业中的按部门划分,一部分人只做前端(HTML/CSS/JavaScript等等),另 ...
- 洛谷 P1204 [USACO1.2]挤牛奶Milking Cows Label:模拟Ex 74分待查
题目描述 三个农民每天清晨5点起床,然后去牛棚给3头牛挤奶.第一个农民在300秒(从5点开始计时)给他的牛挤奶,一直到1000秒.第二个农民在700秒开始,在 1200秒结束.第三个农民在1500秒开 ...