设为首页
收藏本站
最新电影
> 子栏目 Asp | Jsp | XML | XSL | Div+Css | 自定义函数 | 数据库 | 脚本特效
您现在的位置: 首页=>后台技术=>Asp 订阅本栏目  
跨域使用COOKIE的办法
时间: 2007-10-24 15:20:14 阅读次数:4753


所有的网站开发者都会非常喜欢cookie的强大特性和易用性,它在跟踪用户信息,建设人性化、个性化的网站方面,有着强大的作用,而且,又避免了使用数据库的昂贵开销但是,cookie却不能跨越域传递,只有那些创建它的域才能访问;这里,我们讨论如何利用ASP突破这个限制


Cookie简介
首先,我们对Cookie做一个简单的介绍,说明如何利用ASP来维护cookie
Cookie是存储在客户端计算机中的一个小文件,这就意味着每当一个用户访问你的站点,你就可以秘密地在它的硬盘上放置一个包含有关信息的文件飞飞@Asp技术乐园这个文件几乎可以包含任何你打算设置的信息,包括用户信息、站点状态等等这样的话,就有一个潜在的危险:这些信息有可能被黑客读取为了防止这个问题的发生,一个有效的办法就是cookie只能被创建它的域所存取这就是说:比如ytu.edu.cn只能访问ytu.edu.cn创建的cookie通常来讲,这没有什么问题;但是,如果需要两个不同域上的两个不同站点共享保存在cookie中的用户信息,该如何处理呢?当然可以选择复制用户信,但是,如果你需要用户只能在一个站点上注册,并且自东成为另外一个站点的注册用户呢?或者,两个站点共享一个用户数据库,而又需要用户自动登录呢?这时候,跨越域共享cookie是最好的解决方案
这里,先看一些ASP处理cookie的代码,以便以后便于引用参考
’创建Cookie
Response.Cookies("MyCookie").Expires=Date+365
Response.Cookies("MyCookle").Domain="mydomaln.com"
Response.Cookies("MyCookle")("Username")=strUsername
Response.Cookies("MyCookle")("Password")=strPassword
读写cookie非常简单,上面的代码创建一个cookie并给cookie设置属性:域、过期时间,以及其他一些保存在cookie中的值这里,strUsename,strPassword是在前面某个地方设置的变量然后,通过下面的语句在cookie中读取
’读取Cookie
datExpDate=Request.Cookies("MyCookie")
strDomaln=Request.Cookies("MyCookle").Domain
strUsername=Request.Cookies("MyCookle")("Username")
strPassword=Request.Cookies("MyCookie")("Password")
更详细的信息,可以参考ASP的资料


实现
简单地共享cookie的诀窍是重定向,一般过程为:
1.一个用户点击siteA.com
2.如果用户没有siteA.com的cookie,就把用户重定向到siteB.com
3.如果用户有siteB.com的cookie,把用户连同一个特殊的标志(将在下面解释)重定向回siteA.com,否则,只把用户重定向到siteA.com
4.在siteA.com创建cookie
看起来很简单,仔细分析一下:siteA.com和siteB.com共享相同的用户设置,所以,如果用户有siteB.com的cookie(已经注册),siteA.com能够同样读取cookie、提供cookie所允许的特性这样,访问siteA.com的用户就如同访问了siteB.com
这个检查的环节应该在siteA.com中的文件所包含一个cookies.inc中实现让我们看一下这段代码:
l—1
’SiteA.com"检查cookie
IfRequest.Querystring("Checked")<>"True"then
IfnotRequest.Cookies("SiteA_Cookie").Haskeysthen
’重走向到siteB.com
Response.Redlrect("http://www.siteB.com/cookie.asp")
Endif
Endif

如果用户有一个siteA.com的cookie,则不需要做任何事情了;第一个if语句用来消除无限的循环让我们看一下siteB.com上的cookie.asp文件来获得进一步的理解
1—2
’SiteB.com
’检查cookie
IfnotRequest.Cookies("SlteB_Cookle").Haskeysthen
’重定向到siteA.com
Response.Redirect("http://www.siteA.com/index.asp"&"?checked=True")
Else
’获取username
strUsername=Request.Cookies("SiteB_Cookie")("Username")

’将用户连同一个特殊的标志返回到siteA.com
Response.Redlrect("http://www.siteA.com/index.asp"&"?checked=True"&"identrfer="&strUsername)
Endif
如果用户在siteB.com上仍没有cookie,于是,将他送回到siteA.com,并且通过在查询语句中提供一个叫做"checkd"的参数让应用程序知道你已经检查过cookie了否则,将用户送回到siteB.com,并退出循环
然而,如果用户拥有siteB.com的cookie,我们需要将用户送回siteA.com并告诉siteA.com为此,我们在数据库中附加一个唯一的标志,username所以,我们扩展siteA.com中的代码
l—3
’SiteA.com
...
...
’检查标志
IfRequest.Querystring("identifier")<>""then
strUsername=Request.Querystring("identifier")
’记录到数据库
Response.Cookies("siteA_Cookie").Expires=Date+365
Response.Cookies("SiteA_Cookie").Domain="siteA.com"
Response.Cookies("siteA_Cookie")("Username")=strUsername
Endif
最后,我们回到siteA.com文件的第一部分(l-l)检查是否完成了cookie的检查,由于可以明显地知道已经完成(由语句中的"checked"参数表明),进行到l—3所示的程序的第二部分如果存在特殊的标志,我们就可以在siteA.com创建cookie使用这个特殊的标志(在这里是username),我们可以在任何需要的时候查询数据库然后,设置cookie,显示页面的其他部分如果没有指定的标志,也没必要担心,只要简单地显示页面的余下部分
这样,毫不费力地,siteA.com拥有了和siteB.com一样的cookie飞飞As@p技术乐园我们可以传输更多的信息而不只是一个标志,并且,将网络流量控制在最小范围内飞,飞Asp技术乐园
要注意一点,即使用户拥有siteA.com上的cookie,仍需要检查siteB.com通常来讲,这不是必须的,也会节约时间但是,一旦用户在siteB.com更改个人信息?这样做,会保持所有信息的同步

Cookie环
要完成这些,我们需要两个文件:一个在原始站点服务器(siteA.com),完成检查;一个在参考服务器(siteB.com),验证用户如果有一台参考服务器包含有需要的所有用户信息或cookie,就可以增加随意多的原始服务器,所需要做的就是在所有要共享cookie的服务器上增加cookie.inc文件
也可以以相反的次序执行,例如,如果siteB.com是原始服务器,而siteA.com包含用户信息访问过siteA.com却从未访问过siteB.com的用户也可以登录到siteA.com,并且拥有所有的曾经的设置注意,如果拥有多个参考服务器,这样将会很使人迷惑,并且消耗过多的资源,因为必须将用户重定向到每一台参考服务器
理论上讲,可以拥有一个所有站点都共享相同的用户的网络最可行的方案就是建立共享cookie环将参考服务器列表存储在一个地方(备份服务器),以便每个参考服务器可以查找并决定重定向用户的下一个站点记住一定要通过查询字符串的意思跟踪用户是在哪个原始服务器开始这样信息的传输非常迅速,这个环节变得越来越可行
这里还存在一些问题,首先是反应时间对用户而言,他们最好不知道过程是怎样的他所需的时间依赖于siteA.com、siteB.com之间的连接,有可能会比较长,在实现cookie环时可能会更长
再一个主要问题,就是每一个实现者大都会面对无限的重定向这有很多原因,例如:用户的测览器不支持cookie这就需要再设计代码来监测用户浏览器的性能
最好,还需要注意安全问题如果有些黑客发现了其中的诀窍,他可能会得到cookie中的信息最简单的防范办法就是保护参考服务器,只允许原始服务器访问Cookie.asp文件



站内搜索    

下一篇GetRows用法解释

上一篇vbscript Asc 函数 使用介绍

本栏目最新 栏目最新列表
HTTP 401.5 - 未经授权:ISAPI/CGI 应用程序
Asp使用FSO写UTF-8编码文件的方法
asp操作,控制excel的方法
让ewebeditor兼容ie8的方法
Asp实现二级域名的方法
网站优化策划 栏目最新列表
增加网站外链的快速方法
网站上线前必做的30个检查
新的友情链接参考标准(没有google的PR情况
优化Google的AdSense广告的五个工具
王通讲SEO八大基础
站点最新 站点最新列表
微博推广的一些技巧
xhEditor v1.1.7 发布,
收集的一些轻量级非常实
50个新鲜兼容最新版本的
javascript中cookie的设
Excel中出现#VALUE!、#D
jquery插件:飞飞表情插件
十个使用HTML5开发的精彩
支持HTML5的浏览器有哪些
飞妮莫属:漫画:如何写出
历史最热10条信息  
MIME介绍 及 [1] [2] [3]
巧用Google和迅雷来下载
Transact SQL 常 [1] [2]
VIA Rhine II Fast Ethe
电脑常用端 [1] [2] [3]
Do you get a kick out
十道羊皮卷 欣赏+mp3版+
每日一句:A friend and
每日一句:Theres no tu
经典__悟透JavaScript
 width= 
伟哥博客 西安房产 123最新电影 三四六四