百度了一波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. node的安装

    1.打开node官网  https://nodejs.org/en/  下载最新版node安装包 v6.2.2 版本自带npm包,比较方便使用.下载之后就正常的常规安装即可. 2.查看是否安装成功   ...

  2. Loadrunner监控Linux系统资源

    一.安装rsh和rpcbind 1.查看是否安装:rpm -qa |grep rsh 2.安装rsh:yum -y install rsh* 3.yum  -y install nfs-utils r ...

  3. PHP中删除数组空值的方法

    array_filter函数的功能是利用回调函数来对数组进行过滤,如果没有回调函数,那么默认就是删除数组中值为false的项目. 例如 $entry = array(                0 ...

  4. 微信开发之Author网页授权

     微信开发中,经常有这样的需求:获得用户头像.绑定微信号给用户发信息.. 那么实现这些的前提就是授权!   1.配置安全回调域名: 在微信公众号请求用户网页授权之前,开发者需要先到公众平台官网中的&q ...

  5. .NET中RabbitMQ的使用

    概述 MQ全称为Message Queue, 消息队列(MQ)是一种应用程序对应用程序的通信方法.RabbitMQ是一个在AMQP基础上完整的,可复用的企业消息系统.他遵循Mozilla Public ...

  6. 【Java EE 学习 35 上】【strus2】【类型转换器】【struts2和Servlet API解耦】【国际化问题】【资源文件乱码问题已经解决】

    一.类型转换器 1.在动作类action中,声明和表单中name属性的值同名的属性,提供get和set方法,struts2就可以通过反射机制,从页面中获取对应的内容 package com.kdyzm ...

  7. 1.oracle 12c基础

    1.查看数据库的创建模式 SQL> select name,cdb,con_id from v$database; NAME      CDB     CON_ID ---------    - ...

  8. 在 windows 环境下安装 redislive

    这是一篇在 windows 环境下安装 redislive 的教程! 项目地址:https://github.com/nkrode/RedisLive 配置文档:http://www.nkrode.c ...

  9. 好用的px转rem的插件

    一个CSS的px值转rem值的Sublime Text 3自动完成插件. 下载地址: https://github.com/flashlizi/cssrem 安装 下载本项目,比如:git clone ...

  10. CodeForces 13E 分块

    题目链接:http://codeforces.com/problemset/problem/13/E 题意:给定n个弹簧和每个弹簧初始的弹力a[].当球落在第i个位置.则球会被弹到i+a[i]的位置. ...