• HTTP本身是无状态的.

    • 这符合HTTP协议设计的目的.客户端只是简单地向服务器请求某种资源.两者都没有必须记录彼此过去的行为,每一次请求之间都是独立的.
    • 为了保存状态.在客户端使用Cookie,在Server端使用Session.
    • 同时,服务器端状态保存方案在客户端也需要保存一个标识.所以,Session可能需要借助Cookie来进行工作.
  • 理解Cookie机制
    • cookie的分发是通过扩展HTTP协议来实现的.服务器通过在HTTP的响应头中加上一行特殊的指示以提示浏览器生成对应的Cookie.
    • 纯粹的客户端脚本(JS,VS)也可以生成Cookie.
    • 而Cookie的使用是浏览器按照一定的原则在后台自动发送给Server的.
      • 浏览器检查其存储的所有Cookie.如果某个cookie所声明的范围大于等于将要请求的资源的位置,则把该Cookie附在请求资源的HTTP请求头上发送给Server.
    • Cookie的主要内容:名字,值,过期时间,路径和域.
      • 域可与指定为具体的某个域名(google.com).
      • 路径就是跟在域名后面的URL路径(/,/foo).
      • 域+路径构成了cookie的作用范围.
    • 存储
      • 会话cookie.如果没有设定过期时间,则cookie的生命周期为浏览器会话期间.

        • 只要关闭浏览器,cookie就消失了.
        • 一般存储在内存而非硬盘中.
        • 是否可共享跟具体的使用的浏览器有关.
        • 一般使用js中的window.open打开的窗口会与源窗口共享内存cookie.
      • 设置了过期时间的,会被存储在硬盘中.
        • cookie一直有效到超过过期时间.
        • 硬盘中的cookie可以在不同的浏览器进程之间共享(多个IE窗口).
  • 理解Session机制
    • 一种服务器端的机制.

      • 使用散列表(或类似的)形式来保存信息.
    • 服务器需要为客户端的请求生成Session时的处理
      • 首先,检查客户端的请求中是否包含一个SessionID.

        • 如果含有,就说明之前为该客户端创建过Session.然后按照该ID检索出对应的session.
        • 如果没有,则为该客户端生成一个session,并在本次请求响应中将sessionID返回给客户端保存.
      • 保存sessionID可以使用cookie.
        • 这样根据自动传递cookie的规则,浏览器会在下次请求时,自动地将sessionID传递给Server.
        • 由于cookie可以被人为禁止.可使用URL重写来完成SessionID的传递.
          • 就是把sessionID直接附在URL路径的后面.
          • 有两种附加方式.
            • 作为URL的附加信息.表现形式为.http://...XXX;jessionID=xxxxxxxx
            • 作为查询字符串.表现形式为http://....XXX?jessionID=xxxxx.
            • 两种形式在客户端无差异,只是Server端的解析方式不同.第一种有利于区分session和正常的请求.
          • 为了在整个请求过程中保持状态,需要在所有可能的请求路径上都加上sessionID.
        • 另一种技术是表单隐藏字段.
          • Server端自动修改表单,添加一个hidden域,name="jessionID",value=sessionID.
          • 这样,客户端提交表单时,就能把sessionID提交到server.
    • session超时.
      • 除非程序通知Server删除一个Session,否则Server会一直保持Session.
      • 浏览器在关闭时,不会主动通知Server它将要关闭.因此服务器不会有机会知道浏览器已经关闭.
      • 只要关闭浏览器,Session就丢失了
        • 因为大部分的session机制都是用了会话cookie来保存sessionID.
        • 而关闭浏览器后,随着会话cookie的消失,这个sessionID也就消失了.
        • 再次连接Server时,也就无法找到原来的session.
        • 如果cookie被保存在硬盘中,或者改写了HTTP的请求头,能够把原来的sessionID发送给server,那么还是能够找到原来的Session.
      • 由于关闭浏览器不会导致删除session,所以server会为session设置一个失效时间.
        • 当距离客户端上次使用session的时间超过了该失效时间.服务器可以认为客户端已经停止了活动,从而删除session来节省存储空间.

理解Cookie与Session的更多相关文章

  1. 转:理解Cookie和Session机制

    原文: 理解Cookie和Session机制 摘要: Cookie工作原理 由于HTTP是一种无状态的协议,服务器单从网络连接上无从知道客户身份.怎么办呢?就给客户端们颁发一个通行证吧,每人一个,无论 ...

  2. 理解Cookie和Session机制

    转载: 理解Cookie和Session机制 会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话.常用的会话跟踪技术是Cookie与Session.Cookie通过在客户端记录 ...

  3. 形象地理解Cookie和Session

    Cookie和Session的形象理解 通过实际生活中的银行卡来理解Cookie和Session间的关系: Cookie相当于银行卡 Session相当于银行账户 结合到银行存钱和取钱的过程来理解: ...

  4. 为什么你学不会递归?告别递归,谈谈我的一些经验 关于集合中一些常考的知识点总结 .net辗转java系列(一)视野 彻底理解cookie,session,token

    为什么你学不会递归?告别递归,谈谈我的一些经验   可能很多人在大一的时候,就已经接触了递归了,不过,我敢保证很多人初学者刚开始接触递归的时候,是一脸懵逼的,我当初也是,给我的感觉就是,递归太神奇了! ...

  5. 基础知识《十二》一篇文章理解Cookie和Session

    理解Cookie和Session机制 会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话.常用的会话跟踪技术是Cookie与Session.Cookie通过在客户端记录信息确定 ...

  6. 深入理解Cookie和Session机制

    转载理解Cookie和Session机制 目录 Cookie机制什么是CookieCookie的不可跨域名性Unicode编码:保存中文BASE64编码:保存二进制图片设置Cookie的所有属性Coo ...

  7. 理解cookie,session,token

    彻底理解cookie,session,token 发展史 1.很久很久以前,Web 基本上就是文档的浏览而已, 既然是浏览,作为服务器, 不需要记录谁在某一段时间里都浏览了什么文档,每次请求都是一个新 ...

  8. [转帖]彻底理解cookie,session,token

    彻底理解cookie,session,token https://www.cnblogs.com/moyand/p/9047978.html 发展史 1.很久很久以前,Web 基本上就是文档的浏览而已 ...

  9. 一文理解Cookie、Session

    一文理解Cookie.Session 1.什么是会话 用户打开浏览器,点击多个超链接,访问服务器的多个web资源,然后关闭浏览器,整个过程就称为一个会话: HTTP 是无状态,有会话的 HTTP 是无 ...

  10. 理解Cookie和Session机制(转)

    目录[-] Cookie机制 什么是Cookie 记录用户访问次数 Cookie的不可跨域名性 Unicode编码:保存中文 BASE64编码:保存二进制图片 设置Cookie的所有属性 Cookie ...

随机推荐

  1. Eigen库对齐问题:declspec(align('16')) 的形参将不被对齐

    一:错误提示:error C2719: '_Val': formal parameter with __declspec(align('16')) won't be aligned 英文提示:erro ...

  2. Nuget包含css\js等资源文件

    <Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <TargetFramework>netst ...

  3. Python学习笔记(3)for循环和while循环

    2019-02-25 (1)break语句:终止当前循环,跳出循环体. (2)continue语句:终止本轮循环并开始下一轮循环(在下一轮循环开始前,会先测试循环条件). (3)for循环 ① ran ...

  4. python第一周:python初识、流程控制

    编译性语言:在将源代码编译完毕生成一个可执行文件后才能运行 解释性语言:在代码的运行期间进行编译 动态类型语言:在运行期间才去做数据检查的语言,也就是说在使用动态类型语言时不用指定数据类型 静态类型语 ...

  5. 提高生产力:发送邮件API和Web服务(包含源码)

    在Web开发中,发邮件是一种非常常见的功能或任务. 发送邮件的6种方式 一文提到了6种方法,文章发表后,有网友指出了还有另外一种方法,Ant中也可以发送邮件. 打开Foxmail之类的邮件客户端或者在 ...

  6. php中的form表单

    表单处理 表单的概念在生活中很常见,就像是问卷调查表一样,别人先把问卷发给你,你照着问卷的要求填写,完事过后再将填完的问卷发给别人,从而达到一个将别人需要的信息传递给别人的一种方式. 传统的网页大多数 ...

  7. 0113针对大数据量SUM的优化-思路

    转自博客:http://bbs.csdn.net/topics/390426801?page=1 优化思路:无论如何你的结果都是要扫描全有表记录,而在456010记录中,的UserName的分布导致这 ...

  8. CCEditBox/CCEditBoxImpl

    #ifndef __CCEditBoxIMPL_H__ #define __CCEditBoxIMPL_H__ #include "cocos2d.h" #include &quo ...

  9. MySql 基础学习笔记 1——概述与基本数据类型: 整型: 1)TINYINT 2)SMALLINT 3) MEDIUMINT 4)INT 5)BIGINT 主要是大小的差别 图 浮点型:命令

    一.CMD中经常使用mysql相关命令 mysql -D, --database=name  //打开数据库 --delimiter=name  //指定分隔符 -h, --host=name  // ...

  10. do while 循环和while循环的差别

    do while 循环和while循环的差别 1.do while循环是先运行循环体,然后推断循环条件,假设为真,则运行下一步循环,否则终止循环.    while循环是先推断循环条件,假设条件为真则 ...