二、 工作机制

Ø Cookie :采用的是客户端保存信息的方案。

Ø Session :采用服务器端保存信息的方案。

Ø Cache :利用缓存 SRAM 来“静态”的保存写入信息的方案。

如果上面的“专业”解释你还是不能明白,那我们就来“通俗”的解释它们吧!

1 . Cookie 客户端的机制就是用户访问站点时, Web 服务器发送给该用户的不仅仅是一个页面,还有一个包含日期和时间的Cookie 。用户的浏览器在获得页面的同时还得到了这个 Cookie ,并且将它保存在用户硬盘上的某个文件夹中。

Cookie 是一段文本信息,你可以在你的电脑硬盘中找到许多这种文件,它们通常存放在 C:/Documents and Settings/ 用户名/Cookies (早于 Win2000 以前的系统则会存放在 c:/windows/Cookies )。

那么 Web 服务器通过 Cookie 究竟写下了些什么呢?它们用有什么作用呢?

这些就要看 Web 服务器的 code 如何写的了,不过你可以不必担心,服务器在 Cookie 里写下的信息只是为了你下次访问该站点时节约时间或提供一些特定的服务(绝非病毒或是其它可疑滴东东)。而且某些信息数据是加密的(例如密码等),当然也可以通过设置浏览器让它不记录下 Cookie 。

应用举例:一些要求用户登录的站点则可以通过 Cookie 来确定您是否已经登录过,这样您就不必每次都输入登录信息;一些站点的投票功能可以简单地利用 Cookie 作为布尔值,表示您的浏览器是否已经参与了投票,从而避免您重复投票。

2 . Session 服务端的机制是将用户的请求信息放在服务器端来保存信息,服务器使用一种类似于散列表的结构来保存信息。当程序需要为某个客户端的请求创建一个 session 的时候,服务器首先检查这个客户端的请求里是否已包含了一个 session 标识 -称为 session id ,如果已包含一个 session id 则说明以前已经为此客户端创建过 session ,服务器就按照 session id 把这个session 检索出来使用。

保存这个 session id 的方式可以采用 cookie ,这样在交互过程中浏览器可以自动的按照规则把这个标识发送给服务器。由于cookie 可以被人为的禁止,必须有其他机制以便在 cookie 被禁止时仍然能够把 session id 传递回服务器。经常被使用的一种技术叫做 URL 重写,就是把 session id 直接附加在 URL 路径的后面。

这就好像是我们去某些商店去买东西,如果你已是该店的会员,那么商店会给你一张会员卡,下次你再次光顾这家店时只要出示你的会员卡就可以享受订制的服务了。

由于 session 只认 id 不认人,因此不同的浏览器,不同的窗口打开方式以及不同的 cookie 存储方式都会对它的识别产生影响,这时就容易出现了我们常说的 session 混乱了。

还是以上面会员店为例,如忘带会员卡或是会员卡上的照片已经是你好几年前的样子店员无法辨认,商店会重新给你办理一张会员卡。而此时其实你已经有两张会员卡了( session id )正好这两张卡的服务范围不一样(一张是普通卡,一张是 VIP 卡),当你再次去商店你任意的给了商店一张卡,这样你得到的服务有可能根本不是你想要的。

当然如果程序写的好是可以避免这种混乱的情况,有时还可以是跨应用程序的 session 共享。

3 . Cache “静态”机制跟比起以上两种方式就特殊一些。为什么说它是“静态”,是因为它是有程序写入到 SRAM 里的,除非是重新写入数据或关闭电源,否则写入的数据是会保持不变的。

由于 CPU 的存取数据速度比从内存和硬盘中存取数据的速度要快得多,从内存和硬盘中存取数据时会使 CPU 等待,影响计算机的速度。 SRAM 的存取速度比其它内存和硬盘都要快,所以它被用作电脑的高速缓存。

有了高速缓存,可以先把数据预写到其中,需要时直接从它读出,这就缩短了 CPU 的等待时间。高速缓存之所以能提高系统的速度是基于一种统计规律,主板上的控制系统会自动统计内存中哪些数据会被频繁的使用,就把这些数据存在高速缓存中, CPU 要访问这些数据时,就会先到 Cache 中去找,从而提高整体的运行速度。

三、 生命周期区别

Ø Cookie

如果不设置过期时间,则表示这个 cookie 生命周期为浏览器会话期间,只要关闭浏览器窗口, cookie 就消失了。这种生命期为浏览会话期的 cookie 被称为会话 cookie 。会话 cookie 一般不保存在硬盘上而是保存在内存里。
  如果设置了过期时间,浏览器就会把 cookie 保存到硬盘上,关闭后再次打开浏览器,这些 cookie 依然有效直到超过设定的过期时间。有些论坛在你登录时有记住登录信息 1 个月这类的时间选择,这就是为 Cookie 设置了过期时间。这时我们就算关闭了浏览器,再次打开访问这个论坛时仍然会是在线状态不需要再次登录。

Ø Session

和 Cookie 不一样,用户关闭浏览器 Session 仍然保存在服务器端,只要程序发出指令去删除 session ,服务器会一直保留这个会话对象直到它处于非活动状态超过设定的间隔为止。

我们有时会误解当用户关闭浏览器时 Session 已经被删除,是由于大部分 session 机制都使用 cookie 来保存 session id ,而关闭浏览器后这个 session id 就消失了,再次连接到服务器时也就无法找到原来的 session 。

Ø Cache

由于 Cache 的机制我们很明显的可以看出,只有关闭电脑电源或是让程序重写 Cache 。不然这个 Cache 将会一直存在。

Cookie Session Cache的更多相关文章

  1. cookie,,session,cache,static 浅谈笔记

    cookie:存在于客户端,每次请求伴随httpRequest 到达服务器端,Cookie内保存sessionId,服务器端就是根据Cookie中的SessionId找到用户的专有session , ...

  2. c# Cookie,Session,Application,Cache 四种缓存使用情景

    好记性不如烂笔头,记录一下C#缓存使用的情景模式....个人理解,不正之处,欢迎指正 讨论 Cookie,Session,Application,Cache 四种,有的缓存情景对人,有的缓存情景对事儿 ...

  3. Cookie Session和自定义分页

    cookie Cookie的由来 大家都知道HTTP协议是无状态的. 无状态的意思是每次请求都是独立的,它的执行情况和结果与前面的请求和之后的请求都无直接关系,它不会受前面的请求响应情况直接影响,也不 ...

  4. python Cookie Session 相关用法

    Cookie一.前言1.http协议是无状态的. 无状态的意思是每次请求都是独立的,它的执行情况和结果与前面的请求和之后的请求都无直接关系,它不会受前面的请求响 应情况直接影响,也不会直接影响后面的请 ...

  5. django - 总结 - cookie|session

    Cookie是通过HTTP请求和响应头在客户端和服务器端传递的. 在Web开发中,使用session来完成会话跟踪,session底层依赖Cookie技术. --------------------- ...

  6. python自动化开发-[第十九天]-分页,cookie,session

    今日概要: 1.cookie和session 2.csrf 跨站请求伪造 3.自定义分页 一.上节回顾: http请求的本质: - Http请求本质 浏览器(socket客户端): 2. socket ...

  7. day70 cookie & session 前后端交互分页显示

    本文转载自qimi博客,cnblog.liwenzhou.com 概要: 我们的cookie是保存在浏览器中的键值对 为什么要有cookie? 我们在访问浏览器的时候,千万个人访问同一个页面,我们只要 ...

  8. 聚合和分组F,Q和事物,cookie,session

    聚合 aggregate()是QuerySet 的一个终止子句,意思是说,它返回一个包含一些键值对的字典. 键的名称是聚合值的标识符,值是计算出来的聚合值.键的名称是按照字段和聚合函数的名称自动生成出 ...

  9. Django实现cookie&session以及认证系统

    COOKIE&SESSION 知识储备 由于http协议无法保持状态,但实际情况,我们却又需要“保持状态”,因此cookie就是在这样一个场景下诞生. cookie的工作原理是:由服务器产生内 ...

随机推荐

  1. WebStorm 8.0安装LESS编译环境的教程

    WebStorm是一个非常棒的Web前端开发编辑器,被程序猿们成为“最智能的JavaScript IDE”.对HTML5.Bootstrap框架.Node.js等都有完美支持.目前最新版本为WebSt ...

  2. Linux 命令 - killall: 通过进程名向进程发送信号

    命令格式 killall [-Z CONTEXT] [-u USER] [ -eIgiqrvw ] [ -SIGNAL ] NAME... killall -l, --list killall -V, ...

  3. HDOJ2027统计元音

    统计元音 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submis ...

  4. R语言diagram包画订单状态流图

    代码如下: library("diagram") #a <- read.table(file="clipboard",header=TRUE) write ...

  5. Java 源码学习线路————_先JDK工具包集合_再core包,也就是String、StringBuffer等_Java IO类库

    http://www.iteye.com/topic/1113732 原则网址 Java源码初接触 如果你进行过一年左右的开发,喜欢用eclipse的debug功能.好了,你现在就有阅读源码的技术基础 ...

  6. oracle instantclient basic +pl/sql 安装和配置

    oracle instantclient basic +pl/sql 安装和配置 大家都知道,用PL/SQL连接Oracle,是需要安装Oracle客户端软件的,oracle客户端有点大,比较耗资源. ...

  7. ASP.NET实现折线图的绘制

    用到.Net中绘图类,实现折线图的绘制,生成图片,在页面的显示,代码如下: /// <summary> /// 获取数据 /// strChartName:图名称: /// yName:纵 ...

  8. Page 的生命周期学习小结(翻译兼笔记)

    初始化(Initialization) 页面被请求时,第一个被执行的总是下面接着执行的是 接着是 然后是 恢复和加载(Restore and Load) 接下来的 ViewState 被取回后,接着  ...

  9. 《JSON必知必会》

    每天上下班在地铁上很适合看这种书,入门级.难点不多.简约不失严谨. 自从全面转向ASP.NET MVC,现在基本上每天都和JSON打交道,效率.习惯.速度都要掌握. 这本书读起来很快,所以读完也蛮有成 ...

  10. Tomcat虚拟目录的设置

    在学习JSP/Servlet的过程中,配置Tomcat的虚拟目录可能是我们遇到的第一个比较麻烦的问题,说是麻烦是针对我们初学者而言,对于高手那都不是问题.反正我是弄了一天才配置好,发现网上给出的很多配 ...