二、 工作机制

Ø 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. Math.random获得随机数

    function GetRandomNum(Min,Max){           var Range = Max - Min;           var Rand = Math.random(); ...

  2. Map集合的四种遍历方式

    很久以前写的代码,和上一个做比较吧!便于以后查看 import java.util.HashMap; import java.util.Iterator; import java.util.Map; ...

  3. Linux 命令 - umask: 显示或设置文件模式掩码值

    umask 命令控制着创建文件时指定给文件的默认权限.它使用八进制表示法从文件模式属性中删除一个位掩码. 参见下面的例子: [huey@huey-K42JE cmdline]$ rm -f foo.t ...

  4. Android Support v4,v7,v13

    Android Support v4 是最早(2011年4月份)实现的库.用在Android1.6 (API lever 4)或者更高版本之上.它包含了相对V4, V13大的多的功能. 例如:Frag ...

  5. response小结(三)—输出随机图片(验证码功能实现)

    本文是一个很简单的向网页上输出验证码的实现喲!通过注释解释清楚了每一步! Myeclipse下的Package Explorer显示文件结构如下: ResponseDemo.java实现了输出随机图片 ...

  6. docker & nodejs & mongodb

    Nodejs 应用简单的访问Mongodb 部署至Docker 1.本地简单的写能运行起来的一个nodejs (demo可写的更简单 一个post一个get即可) schemas  user.js v ...

  7. linux 运维知识体系

    这里将会介绍一下,LINUX运维工程师的知识体系. 只能说是个人理解吧.并不是必要或者充分的,仅供网友参考. 大部分本博客都有涉及,并不完整. 1.LINUX运维基础 1.1.LINUX系统的简介,分 ...

  8. Kail安装Parallels tools

    今天在安装虚拟机里面安装kail,在安装虚拟机提供的tools时候提示没有权限,如图: 后面经过自己证实首先tools是挂载的cdrom,在这样挂载下是没有写权限的(类似于windows下面读取光盘光 ...

  9. 解决DB2事物日志满、扩充表字段长度和表空间的命令

    解决DB2事物日志满.扩充表字段长度和表空间的命令 转:http://blog.sina.com.cn/s/blog_4c0137d10100bb5r.html 一.通常我们在使用db2导入数据或进行 ...

  10. jquery checkBox的问题

    在新版的jquery中选择ckeckbox最好使用prop方法,否则会出现一些问题.比如手动点击取消,再使用代码全选或者反选时候就不好使啦!!!