代码改变世界

Cookie小记

2008-12-26 17:32  hyddd  阅读(1417)  评论(0编辑  收藏

  最近在工作上经常看一些安全相关的东西,Cookie以前看过,但了解不深,现在重看,先记录一下。

  以下有一些资料是转至百度百科(发现百度百科做的越来越好了,赞一个),有一些是自己的总结:

1.Cookie是什么?

  可以先这么理解,它是在你计算机里的一个文件 (看得见实物总比抽象的概念来得容易理解),IE存放Cookie文件的地方是:“C:\Documents and Settings\用户名\Cookies”, 比如:Cookie:yournames@alimama[1].txt这就是其中一个Cookie文件;如果你用的是NetsCape,Cookie则存放在:“C:\PROGRAMFILES\NETSCAPE\USERS\”,并且和IE不同,它只是用一个Cookie文件记录所有的Cookies记录。

2.Cookie是里面记录了些什么,什么时候生成的?

  Cookie是当你浏览某网站时,网站存储在你机器上的一个小文本文件,它记录了你的用户ID,密码、浏览过的网页、停留的时间等信息,当你再次来到该网站时,网站通过读取Cookie,得知你的相关信息,就可以做出相应的动作,如在页面显示欢迎你的标语,或者让你不用输入ID、密码就直接登录等等。

  Cookie中的内容大多数经过了加密处理,因此在我们看来只是一些毫无意义的字母数字组合,只有服务器的CGI处理程序才知道它们真正的含义。通过一些软件可以更方便去查看,比如Cookie Pal,它是一个查看Cookie的工具,我试用了一下,他只不过是把Cookie信息都列了出来,跟你自己去目录自己找看到的东西是一样的,就是方便一点,数据加密了还是加密了,想要明白这些数据的含义估计得问写这些网站的人了X|(当然部分还是可以大概猜得到的)。

3.为什么需要Cookie这种机制?

  这得从HTTP协议说起,HTTP协议本身是无状态的,这与HTTP协议本来的目的是相符的,客户端只需要简单的向服务器请求下载某些文件,无论是客户端还是服务器都没有必要纪录彼此过去的行为,每一次请求之间都是独立的。

  但随着WEB的发展,WEB需要用动态信息状态)去丰富WEB的功能,其中Cookie就是作用解决HTTP协议无状态的缺陷提出的一种方案。值得注意的是对比Session这个概念,Cookie机制是保存客户端状态的方案,而Session是保存服务端态的方案。

4.理解Cookie机制:

  正统的cookie分发是通过扩展HTTP协议来实现的,服务器通过在HTTP的响应头中加上一行特殊的指示以提示浏览器按照指示生成相应的cookie。然而纯粹的客户端脚本如JavaScript或者VBScript也可以生成cookie。

  而cookie的使用是由浏览器按照一定的原则在后台自动发送给服务器的。浏览器检查所有存储的cookie,如果某个cookie所声明的作用范围大于等于将要请求的资源所在的位置,则把该cookie附在请求资源的HTTP请求头上发送给服务器。意思是麦当劳的会员卡只能在麦当劳的店里出示,如果某家分店还发行了自己的会员卡,那么进这家店的时候除了要出示麦当劳的会员卡,还要出示这家店的会员卡。

  cookie的内容主要包括:名字,值,过期时间,路径和域。 

  其中域可以指定某一个域比如.google.com,相当于总店招牌,比如宝洁公司,也可以指定一个域下的具体某台机器比如www.google.com或者froogle.google.com,可以用飘柔来做比。路径就是跟在域名后面的URL路径,比如/或者/foo等等,可以用某飘柔专柜做比。路径与域合在一起就构成了cookie的作用范围。 可以看一下CookiePal的Cookie列表的截图:

  如果不设置过期时间,则表示这个cookie的生命期为浏览器会话期间,只要关闭浏览器窗口,cookie就消失了。这种生命期为浏览器会话期的 cookie被称为会话cookie。会话cookie一般不存储在硬盘上而是保存在内存里,当然这种行为并不是规范规定的。如果设置了过期时间,浏览器就会把cookie保存到硬盘上,关闭后再次打开浏览器,这些cookie仍然有效直到超过设定的过期时间。

  存储在硬盘上的cookie可以在不同的浏览器进程间共享,比如两个IE窗口。而对于保存在内存里的cookie,不同的浏览器有不同的处理方式。对于 IE,在一个打开的窗口上按Ctrl-N(或者从文件菜单)打开的窗口可以与原窗口共享,而使用其他方式新开的IE进程则不能共享已经打开的窗口的内存 cookie;对于Mozilla Firefox0.8,所有的进程和标签页都可以共享同样的cookie。一般来说是用javascript的window.open打开的窗口会与原窗口共享内存cookie。浏览器对于会话cookie的这种只认cookie不认人的处理方式经常给采用session机制的web应用程序开发者造成很 大的困扰。

5.如何增加Cookie记录:

  增加Cookie的方法很多,下面是两种增加Cookie的方法:

Response.Cookies("userName").Value = "mike"
Response.Cookies(
"userName").Expires = DateTime.Now.AddDays(1

Dim aCookie As New HttpCookie("lastVisit")
aCookie.Value 
= DateTime.Now.ToString
aCookie.Expires 
= DateTime.Now.AddDays(1)
Response.Cookies.Add(aCookie) 

  大概先记录这么多了,有机会再补充!

 

参考资料:

1.http://zhidao.baidu.com/question/2601861.html

2.http://baike.baidu.com/view/835.htm