http://www.2cto.com/kf/201206/135471.html
HTTP协议与状态保持
HTTP协议自己是无状态的,这与HTTP协议原本的目的是相符的,客户端只须要简单的向服务器请求下载某些文件,不管是客户端仍是服务器都没有必要纪录彼此过去的行为,每一次请求之间都是独立的,比如一个顾客和一个自动售货机或者一个普通的(非会员制)大卖场之间的关系同样。
然而聪明(或者贪心?)的人们很快发现若是可以提供一些按需生成的动态信息会使web变得更加有用,就像给有线电视加上点播功能同样。这种需求一方面迫使HTML逐步添加了表单、脚本、DOM等客户端行为,另外一方面在服务器端则出现了CGI规范以响应客户端的动态请求,做为传输载体的HTTP协议也添加了文件上载、cookie这些特性。其中cookie的做用就是为了解决HTTP协议无状态的缺陷所做出的努力。至于后来出现的session机制则是又一种在客户端与服务器之间保持状态的解决方案。
让咱们用几个例子来描述一下cookie和session机制之间的区别与联系。笔者曾常常去的一家咖啡店有喝5杯咖啡免费赠一杯咖啡的优惠,然而一次性消费5杯咖啡的机会微乎其微,这时就须要某种方式来纪录某位顾客的消费数量。想象一下其实也无外乎下面的几种方案:
一、该店的店员很厉害,能记住每位顾客的消费数量,只要顾客一走进咖啡店,店员就知道该怎么对待了。这种作法就是协议自己支持状态。
二、发给顾客一张卡片,上面记录着消费的数量,通常还有个有效期限。每次消费时,若是顾客出示这张卡片,则这次消费就会与之前或之后的消费相联系起来。这种作法就是在客户端保持状态。
三、发给顾客一张会员卡,除了卡号以外什么信息也不纪录,每次消费时,若是顾客出示该卡片,则店员在店里的纪录本上找到这个卡号对应的纪录添加一些消费信息。这种作法就是在服务器端保持状态。
因为HTTP协议是无状态的,而出于种种考虑也不但愿使之成为有状态的,所以,后面两种方案就成为现实的选择。具体来讲cookie机制采用的是在客户端保持状态的方案,而session机制采用的是在服务器端保持状态的方案。同时咱们也看到,因为采用服务器端保持状态的方案在客户端也须要保存一个标识,因此session机制可能须要借助于cookie机制来达到保存标识的目的,但实际上它还有其余选择。
http://www.blogjava.net/cheneyfree/archive/2007/05/26/120168.html
Cookie 定义
typedef struct CookieEntry
{
PTCHAR pszName;
PTCHAR pszValue;
PTCHAR pszUrlPath;
DWORD dwFlags;//Security Flags
DWORD dwLowWordExpiration;//LowWord of FILETIME
DWORD dwHighWordExpiration;//HighWord ofFILETIME
DWORD dwLowWordCreation;//LowWord of FILETIME
DWORD dwHighWordCreation;//HighWord of FILETIME
CHAR chEnd;//'*'
}COOKIEENTRY, *LPCOOKIEENTRY;
总结起来,每一个Cookie有6个属性,分别 为:Cookies Name; Cookies Value; Domain;Path; Secure; Expire Date。这里给出的Cookie的6个属性和C++中定义的结构体不彻底一致。其缘由将在Cookie的文件格式小节给出解释。
下面对Cookie结构中的各个属性分别给出解释:
Cookies Name <Key>, 必要属性,指明了Cookie的名字,有一系列字符(不包括括号、逗号、空格等)组成;每一个cookie由一个惟一的名称表明,这个名称能够包含字母、数 字、下划线。Cookie的名称是不分大小写,因此mycookie和MyCookie是同样。但考虑到服务器端语言可能区分大小写,因此对程序开发者来 说定义和使用时最好仍是区分大小写。
Cookies Value,<Value>Cookie 的值,Web服务器储存在Cookie中的信息;保存在Cookie中的字符串值。这个值在存储以前是用encodeURIComponent()对其进 行编码的,不然会丢失数据或占用了Cookie。并且Cookie名字和值加起来的字节数不能超过4095字节,也即4KB。
Domain, 可选,指明了Cookie的有效域的范围,默认的是产生Cookie的服务器的名字;出于安全考虑,网站不能访问由其余域所建立的Cookie。建立 Cookie之后,域的信息会做为cookie的一部分存储下来。关于域,举个例子来讲,如http://www.baidu.com/view /index.html, 它的域为:baidu.com。这里不作详述,后面的章节会有所涉及。
Path, 可选,指明了Cookie在有效域中的有效路径,在有效路径外的网页不能够读写Cookie,默认的是产生此Cookie的信息的URL;而该属性也是 Cookie的另外一个安全特征,限制对Web服务器上特定目录的访问。即控制哪些访问能触发发送。例如请求的地址是上面的URL,若是 path=/view,这个Cookie就会被发送,可是path为其余路径的话,该Cookie会被忽略。
Secure, 可选,一个true/false值,用于表示Cookie是否只能从安全网站(使用SSL和https协议的网站)中访问;即若是标记一个Cookie为 安全的(这个值被设置为true),那么仅当客户端与服务器的对话通道是安全的(如HTTP over SSL),Cookie才会被传送。
Expire Date, 可选,指明了Cookie的有效时间,一旦过时,Cookie将再也不有效,一般由产生Cookie的程序(Date由服务器指明)指定,若是不指明,系统会默认Cookie将在用户会话结束后自动过时。php
cookie机制和session机制的区别
*************************************************************************************
Cookie是客户端的存储空间,由浏览器来维持。具体来讲cookie机制采用的是在客户端保持状态的方案,而session机制采用的是在服务器端保持状态的方案。同时咱们也看到,因为才服务器端保持状态的方案在客户端也须要保存一个标识,因此session机制可能须要借助于cookie机制("PHPSESSID")来达到保存标识的目的,但实际上还有其余选择,好比说重写URL和隐藏表单域。
如何利用实现自动登陆
*************************************************************************************
当用户在某个网站注册后,就会收到服务器发送的一个唯一用户ID的cookie。客户后来从新链接时,这个用户ID会自动发送回服务器,服务器对它进行检查,肯定它是否为注册用户且选择了自动登陆,从而使用户务需给出明确的用户名和密码,就能够访问服务器上的资源。
如何根据用户的爱好定制站点
*************************************************************************************
网站可使用cookie记录用户的意愿。对于简单的设置,网站能够直接将页面的设置存储在cookie中完成定制。然而对于更复杂的定制,网站只需仅将一个唯一的标识符发送给用户,由服务器端的数据库存储每一个标识符对应的页面设置。
经过Cookie实现Session保持
http://l62s.iteye.com/blog/1663113
css
点击(此处)折叠或打开html
基于http协议的,那么若是网站不是php作的话,那个叫作Sessionid的Cookie可能叫作别的了,就不是PHPSESSID了,而是叫作别的名字了,这个可能要具体状况去查了。
HTTP协议分析:
http://blog.csdn.net/gueter/article/details/1524447java