Asp之Cookie篇—概述Cookie原理、归纳Cookie方法属性及应用

什么是Cookies?

Cookies是数据包,可以让网页具有记忆功能,在某台电脑上记忆一定的信息。Cookies的工作原理是,第一次由服务器端写入到客户端的系统中。以后每次访问这个网页,都是先由客户端将Cookies发送到服务器端,再由服务器端进行判断,然后再产生HTML代码返回给客户端,这是一个很重要的原理。

Cookie是怎样工作的?

Cookies将通过HTTP Headers来从服务端返回到浏览器上。服务端首先在响应中利用Set-Cookie header来创建一个Cookie,浏览器后面的请求的cookie header中就会返回这个Cookie来完成浏览器的认证。

假设你创建了一个名字为UserName的Cookie来包含访问者的信息,创建Cookie时,Server的Header就象下面(假设访问者为suosams):

Set-Cookie: UserName=suosams;path=/;domain=asp163.org;

expires=2010/10/20

这个Header就在浏览器的电脑上的Cookie文件中添加了一条记录。浏览器将名字为UserName的Cookie赋值为suosams。请注意这个cookie的值是进行了URL-encoded操作的。

浏览器创建了一个Cookie后,在每一个针对该网站的请求时,如果符合设定条件(Domain和Path),都会在Header中带着这个Cookie,对于不符合条件的及其他网站的请求Cookie是绝对不会跟着发送的。

关于Cookie字典,Header中的信息

Response.Cookies("mm")("name")="suosams"
Response.Cookies("mm")("pwd")="123456"

当这么Cookie字典创建时,请求的Header中是这样的信息:

Set-Cookie:mm=name=suosams&pwd=123456

Cookie在ASP中的最常用的方法

1、如何写入及读取Cookies?

Response.Cookies("字段名")=变量或字符串,例如:
Response.Cookies("url")="www.asp163.org"
a=Request.Cookies("url")

Response.Cookies("mm")("url")="www.asp163.org"
a=Request.Cookies("mm")("url")

读cookies的过程是:先从客户端的内存中找该作用域的Cookies信息,如果没有,从客户端的IE缓存中找该作用域的Cookies文件,如果没有,从上级作用域的Cookies文件中去找...如果都没有,将读不到信息。优先级为:内存本作用域>IE缓存本作用域>IE缓存上级作用域

2、如何设置Cookies过期时间?

Expires属性: 指定了该cookie的过期时间;

有了该句后会在客户IE缓存中生成一个cookies文件;如果没有该句,不会生成cookies文件,cookies信息将保存在客户的内存中,该信息在IE进程内有效,即用户关闭该站的所有页面后该信息自行消失。

Response.Cookies("字段名").Expires=时间函数+N,例如:
Response.Cookies("name").Expires=Date+1  '表示Cookies保存1天。

'Cookies保存8小时
Response.Cookies("mm").Expires=Hour+8'错误写法,另外保存10秒 Second(Now)+10也是错误的
Response.Cookies("mm").Expires=DateAdd("h",8,Now())'正确写法

'Cookies保存20秒
Response.Cookies("mm").Expires=Second(Now)+20'错误写法
Response.Cookies("mm").Expires=DateAdd("s",20,Now())'正确写法

A页面内容<%
Response.Cookies("mm")("url")="www.asp163.org"
Response.Cookies("mm").Expires=DateAdd("s",10,Now())
Response.Write Request.Cookies("mm")("url")
%>
B页面内容<%=Response.Write request.cookies("mm")("url")%>

Response.cookies("mm").Expires="2010/10/20"  '表示Cookies到2010/10/20过期。
Response.cookies("mm").Expires=#2010/10/20#  '表示Cookies到2010/10/20过期。

3、Domain属性

Response.cookies("mm").Domain="asp163.org"

Domain属性: Domain属性能够在浏览器端对Cookie发送进行限定。在这个例子中,Cookie只能发送到asp163.org这个域中,而决不会跑到什么www.163.com或者什么其他网站。

4、Path属性[只写]

Response.cookies("mm").Path="/user"

Path属性: 指定了该Cookie只能发送到路径/user的请求中。就是说只有/user目录下的文件(包含子目录下的文件)才可以访问这个Cookie;其它目录则无法访问,比如根目录下所有文件或/zj目录下的则无法访问这个Cookie

Path,即作用域,可以理解为:写到该作用域的数据,只有在站点下的文件夹(包括子文件夹)下的页面内才可以读到,即作用域为文件夹。如果去掉该句,默认在本站点下或该代码页所在的虚拟目录下有效。例如:在子文件夹下不设定path或path="/",生成的cookies作用域为整个站点;在虚拟目录下不设定path,生成的cookies作用域为本虚拟目录;path="/myasp",生成的cookies作用域为站点下myasp子目录

注意:现在的浏览器在判断Cookie的路径时是区分大小写的,这就意味着如果路径是/user,那么以/USER路径方式就无法进行这个Cookie的调用和认证。

5、Secure属性

该属性设为True则在数据传输过程中采用加密算法,如果你正在使用安全接口层,那么你就可以使用这个属性

Response.cookies("mm").Secure=True

6、Cookie字典

Response.Cookies("mm")("url")="www.asp163.org"
Response.Cookies("mm")("admin")="大头爸爸"

这个脚本创建了一个名为mm的Cookie字典,其中含有两个键分别是url和admin

如果希望知道一个Cookie是否是一个Cookie字典,可以用HasKeys属性,如果返回值True,那么就是一个Cookie字典。

IF Request.Cookies("mm").HasKeys Then Response.Write "这是一个Cookie字典"

cookies字典取值

<%
response.cookies("a")("a")="c"
response.cookies("a")("b")="c"
response.cookies("c")("c")="1234"
response.cookies("a")("d")="222"
response.cookies("a")("e")="abcd"
response.cookies("a")("f")="aac"
response.cookies("c")("g")="c"
response.cookies("a")("h")="我们"

for each key in request.cookies("a")
  response.write request.cookies("a")(key) & "<br>"
next
%>

7、清空Cookies

在以往的ASP教程中,很少有介绍Cookies退出的方法。在“退出”这个ASP页中可以这样写:
Response.Cookies(mm).Expires=Now()-1'删除Cookies,设置过期时间(-1天)
Response.Cookies("字段名")=""
之后,在客户端的浏览器就清除了Cookies,并且Cookies文件会消失。注意有多少个字段,就要写多少句来清除。

Cookies是属于Session对象的一种。但有不同,Cookies不会占服务器资源;而“Session”则会占用服务器资源。所以,尽量不要使用Session,而使用Cookies。

注意:利用Cookie技术传递诸如密码这样的信息要特别小心,因为一般说来,这种信息是未经加密的,当然,如果你的网站有安全接口层技术,也可以进行加密传输,但是在浏览器端该信息还是存放在文本文件中。

例子:

<%
'刷新页面或再次打开此页面时,显示的顺序将颠倒,为什么??
Response.Cookies("TestCookies1")("Name")="Test Cookies 1"
Response.Cookies("TestCookies1")("Name")="TestCookies1"
Response.Cookies("TestCookies1").path="/"
Response.Cookies("TestCookies1").expires=#2004/7/25#
Response.Cookies("TestCookies2")="Test Cookies 2"
Response.Cookies("TestCookies2").path="/"
Response.Cookies("TestCookies2").expires=#2004/7/25#
%>
<html>
<head>
<title>Cookie的使用--创建、读取cookies值</title>
</head>
<body>
<%
'利用循环读取TestCookies1
For Each cookiesname IN Request.Cookies
  IF Request.Cookies(cookiesname).haskeys then
    For Each keycookies IN Request.Cookies(cookiesname)
      Response.Write keycookies & "的内容值是: " & Request.Cookies(cookiesname) & "<br>"
    Next
  Else
    Response.Write Cookiesname & "的内容值是: " & Request.Cookies(cookiesname) & "<br>"
  End IF
Next
%>
</body>
</html>

每个Cookie的最大字节4KB,最多可以有300个Cookie 1.2MB

你可能感兴趣的:(浏览器,Cookies,header,url,asp,Path)