Cookie简介
首先我们对Cookie做一个简单的介绍说明如何利用ASP来维护cookie
Cookie是存储在客户端计算机中的一个小文件这就意味着每当一个用户访问你的站点你就可以秘密地在它的硬盘上放置一个包含有关信息的文件这个文件几乎可以包含任何你打算设置的信息包括用户信息站点状态等等这样的话就有一个潜在的危险这些信息有可能被黑客读取为了防止这个问题的发生一个有效的办法就是cookie只能被创建它的域所存取这就是说比如只能访问创建的cookie通常来讲这没有什么问题但是如果需要两个不同域上的两个不同站点共享保存在cookie中的用户信息该如何处理呢?当然可以选择复制用户信但是如果你需要用户只能在一个站点上注册并且自东成为另外一个站点的注册用户呢?或者两个站点共享一个用户数据库而又需要用户自动登录呢?这时候跨越域共享cookie是最好的解决方案
这里先看一些ASP处理cookie的代码以便以后便于引用参考
创建Cookie
ResponseCookies(MyCookie)Expires=Date+
ResponseCookies(MyCookle)Domain=
ResponseCookies(MyCookle)(Username)=strUsername
ResponseCookies(MyCookle)(Password)=strPassword
读写cookie非常简单上面的代码创建一个cookie并给cookie设置属性域过期时间以及其他一些保存在cookie中的值这里strUsenamestrPassword是在前面某个地方设置的变量然后通过下面的语句在cookie中读取
读取Cookie
datExpDate=RequestCookies(MyCookie)
strDomaln=RequestCookies(MyCookle)Domain
strUsername=RequestCookies(MyCookle)(Username)
strPassword=RequestCookies(MyCookie)(Password)
更详细的信息可以参考ASP的资料
实现
简单地共享cookie的诀窍是重定向一般过程为
一个用户点击
如果用户没有的cookie就把用户重定向到
如果用户有的cookie把用户连同一个特殊的标志(将在下面解释)重定向回否则只把用户重定向到
在创建cookie
看起来很简单仔细分析一下和共享相同的用户设置所以如果用户有的cookie(已经注册)能够同样读取cookie提供cookie所允许的特性这样访问的用户就如同访问了
这个检查的环节应该在中的文件所包含一个cookiesinc中实现让我们看一下这段代码
l—
检查cookie
If RequestQuerystring(Checked)<>True then
If not RequestCookies(SiteA_Cookie)Haskeys then
重走向到
ResponseRedlrect()
End if
End if
如果用户有一个的cookie则不需要做任何事情了第一个if语句用来消除无限的循环让我们看一下上的cookieasp文件来获得进一步的理解
—
检查cookie
If not RequestCookies(SlteB_Cookle)Haskeys then
重定向到
ResponseRedirect(&?checked=True)
Else
获取username
strUsername=RequestCookies(SiteB_Cookie)(Username)
将用户连同一个特殊的标志返回到
ResponseRedlrect(&?checked=True&identrfer=&strUsername)
End if
如果用户在上仍没有cookie于是将他送回到并且通过在查询语句中提供一个叫做checkd的参数让应用程序知道你已经检查过cookie了否则将用户送回到并退出循环
然而如果用户拥有的cookie我们需要将用户送回并告诉为此我们在数据库中附加一个唯一的标志username所以我们扩展中的代码
l—
检查标志
If RequestQuerystring(identifier)<> then
strUsername=RequestQuerystring(identifier)
记录到数据库
ResponseCookies(siteA_Cookie)Expires=Date+
ResponseCookies(SiteA_Cookie)Domain=
ResponseCookies(siteA_Cookie)(Username)=strUsername
End if
最后我们回到文件的第一部分(l-l)检查是否完成了cookie的检查由于可以明显地知道已经完成(由语句中的checked参数表明)进行到l—所示的程序的第二部分如果存在特殊的标志我们就可以在创建cookie使用这个特殊的标志(在这里是username)我们可以在任何需要的时候查询数据库然后设置cookie显示页面的其他部分如果没有指定的标志也没必要担心只要简单地显示页面的余下部分
这样毫不费力地拥有了和一样的cookie我们可以传输更多的信息而不只是一个标志并且将网络流量控制在最小范围内
要注意一点即使用户拥有上的cookie仍需要检查通常来讲这不是必须的也会节约时间但是一旦用户在更改个人信息?这样做会保持所有信息的同步
Cookie环
要完成这些我们需要两个文件一个在原始站点服务器()完成检查一个在参考服务器()验证用户如果有一台参考服务器包含有需要的所有用户信息或cookie就可以增加随意多的原始服务器所需要做的就是在所有要共享cookie的服务器上增加cookieinc文件
也可以以相反的次序执行例如如果是原始服务器而包含用户信息访问过却从未访问过的用户也可以登录到并且拥有所有的曾经的设置注意如果拥有多个参考服务器这样将会很使人迷惑并且消耗过多的资源因为必须将用户重定向到每一台参考服务器
理论上讲可以拥有一个所有站点都共享相同的用户的网络最可行的方案就是建立共享cookie环将参考服务器列表存储在一个地方(备份服务器)以便每个参考服务器可以查找并决定重定向用户的下一个站点记住一定要通过查询字符串的意思跟蹤用户是在哪个原始服务器开始这样信息的传输非常迅速这个环节变得越来越可行
这里还存在一些问题首先是反应时间对用户而言他们最好不知道过程是怎样的他所需的时间依赖于之间的连接有可能会比较长在实现cookie环时可能会更长
再一个主要问题就是每一个实现者大都会面对无限的重定向这有很多原因例如用户的测览器不支持cookie这就需要再设计代码来监测用户浏览器的性能
最好还需要注意安全问题如果有些黑客发现了其中的诀窍他可能会得到cookie中的信息最简单的防范办法就是保护参考服务器只允许原始服务器访问Cookieasp文件