|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
想法是和程序员的想法不一样的.至于为什么.大家去想一想.跟心理学有关的cookie一切的网站开辟者城市十分喜好cookie的壮大特征和易用性,它在跟踪用户信息,建立人道化、本性化的网站方面,有着壮大的感化,并且,又制止了利用数据库的高贵开支。可是,cookie却不克不及超过域传送,只要那些创立它的域才干会见;这里,我们会商怎样使用ASP冲破这个限定。
Cookie简介
起首,我们对Cookie做一个复杂的先容,申明怎样使用ASP来保护cookie。
Cookie是存储在客户端盘算机中的一个小文件,这就意味着每当一个用户会见你的站点,你就能够奥密地在它的硬盘上安排一个包括有关信息的文件。这个文件几近能够包括任何你盘算设置的信息,包含用户信息、站点形态等等。如许的话,就有一个潜伏的伤害:这些信息有大概被黑客读取。为了避免这个成绩的产生,一个无效的举措就是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。我们能够传输更多的信息而不但是一个标记,而且,将收集流量把持在最小局限内。
要注重一点,即便用户具有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文件。
</p>缺乏可以共同遵循的行业标准,ASP还处在发展初期,大家对它的理解不同,如产品和服务标准,收费标准等,不利于行业的健康发展。 |
|