二叉索引树java代码 二叉搜索树代码( 八 )


然而聪明(或者贪心?)的人们很快发现如果能够提供一些按需生成的动态信息会使web变得更加有用,就像给有线电视加上点播功能一样 。这种需求一方面迫使HTML逐步添加了表单、脚本、DOM等客户端行为,另一方面在服务器端则出现了CGI规范以响应客户端的动态请求,作为传输载体的HTTP协议也添加了文件上载、cookie这些特性 。其中cookie的作用就是为了解决HTTP协议无状态的缺陷所作出的努力 。至于后来出现的session机制则是又一种在客户端与服务器之间保持状态的解决方案 。
让我们用几个例子来描述一下cookie和session机制之间的区别与联系 。笔者曾经常去的一家咖啡店有喝5杯咖啡免费赠一杯咖啡的优惠,然而一次性消费5杯咖啡的机会微乎其微 , 这时就需要某种方式来纪录某位顾客的消费数量 。想象一下其实也无外乎下面的几种方案:
1、该店的店员很厉害,能记住每位顾客的消费数量,只要顾客一走进咖啡店 , 店员就知道该怎么对待了 。这种做法就是协议本身支持状态 。
2、发给顾客一张卡片 , 上面记录着消费的数量,一般还有个有效期限 。每次消费时,如果顾客出示这张卡片,则此次消费就会与以前或以后的消费相联系起来 。这种做法就是在客户端保持状态 。
3、发给顾客一张会员卡,除了卡号之外什么信息也不纪录,每次消费时,如果顾客出示该卡片,则店员在店里的纪录本上找到这个卡号对应的纪录添加一些消费信息 。这种做法就是在服务器端保持状态 。
由于HTTP协议是无状态的 , 而出于种种考虑也不希望使之成为有状态的,因此 , 后面两种方案就成为现实的选择 。具体来说cookie机制采用的是在客户端保持状态的方案,而session机制采用的是在服务器端保持状态的方案 。同时我们也看到,由于采用服务器端保持状态的方案在客户端也需要保存一个标识,所以session机制可能需要借助于cookie机制来达到保存标识的目的,但实际上它还有其他选择 。
三、理解cookie机制
cookie机制的基本原理就如上面的例子一样简单 , 但是还有几个问题需要解决:“会员卡”如何分发;“会员卡”的内容;以及客户如何使用“会员卡” 。
正统的cookie分发是通过扩展HTTP协议来实现的,服务器通过在HTTP的响应头中加上一行特殊的指示以提示浏览器按照指示生成相应的cookie 。然而纯粹的客户端脚本如JavaScript或者VBScript也可以生成cookie 。
而cookie的使用是由浏览器按照一定的原则在后台自动发送给服务器的 。浏览器检查所有存储的cookie,如果某个cookie所声明的作用范围大于等于将要请求的资源所在的位置 , 则把该cookie附在请求资源的HTTP请求头上发送给服务器 。意思是麦当劳的会员卡只能在麦当劳的店里出示,如果某家分店还发行了自己的会员卡 , 那么进这家店的时候除了要出示麦当劳的会员卡,还要出示这家店的会员卡 。
cookie的内容主要包括:名字,值,过期时间,路径和域 。
其中域可以指定某一个域比如.google.com,相当于总店招牌,比如宝洁公司,也可以指定一个域下的具体某台机器比如或者froogle.google.com , 可以用飘柔来做比 。
路径就是跟在域名后面的URL路径,比如/或者/foo等等,可以用某飘柔专柜做比 。
路径与域合在一起就构成了cookie的作用范围 。
如果不设置过期时间 , 则表示这个cookie的生命期为浏览器会话期间 , 只要关闭浏览器窗口,cookie就消失了 。这种生命期为浏览器会话期的cookie被称为会话cookie 。会话cookie一般不存储在硬盘上而是保存在内存里,当然这种行为并不是规范规定的 。如果设置了过期时间,浏览器就会把cookie保存到硬盘上 , 关闭后再次打开浏览器 , 这些cookie仍然有效直到超过设定的过期时间 。

推荐阅读