二、 工作机制
Ø 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 将会一直存在。