蒙在股里 发表于 2015-1-16 22:31:52

ASP网页编程之Asp中怎样计划超过域的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文件。因为现在数据库都使用标准的SQL语言对数据库进行管理,所以如果是标准SQL语言,两者基本上都可以通用的。SQLServer还有更多的扩展,可以用存储过程,数据库大小无极限限制。

海妖 发表于 2015-1-19 16:11:30

ASP.Net摆脱了以前ASP使用脚本语言来编程的缺点,理论上可以使用任何编程语言包括C++,VB,JS等等,当然,最合适的编程语言还是MS为.NetFrmaework专门推出的C(读csharp),它可以看作是VC和Java的混合体吧。

飘飘悠悠 发表于 2015-1-24 15:49:29

用户端的浏览器不需要提供任何别的支持,这样大提高了用户与服务器之间的交互的速度。

不帅 发表于 2015-2-2 07:25:19

下载一个源代码,然后再下载一个VBScript帮助,在源代码中遇到不认识的函数或是其他什么程序,都可以查帮助进行解决,这样学习效率很高。

活着的死人 发表于 2015-2-7 17:39:18

兴趣爱好,那么你无须学编程,申请一个域名和空间,在网上下载一些免费开源的CMS系统,你不用改代码,只须熟悉它们的后台操作,像office一样简单方便,很快就能建一个站点,很多站长都是这样做的

第二个灵魂 发表于 2015-2-22 20:11:25

封装性使得代码逻辑清晰,易于管理,并且应用到ASP.Net上就可以使业务逻辑和Html页面分离,这样无论页面原型如何改变,业务逻辑代码都不必做任何改动;继承性和多态性使得代码的可重用性大大提高。

山那边是海 发表于 2015-3-7 02:12:31

你可以通过继承已有的对象最大限度保护你以前的投资。并且C#和C++、Java一样提供了完善的调试/纠错体系。

老尸 发表于 2015-3-14 07:40:51

ASP.Net和ASP的最大区别在于编程思维的转换,而不仅仅在于功能的增强。ASP使用VBS/JS这样的脚本语言混合html来编程,而那些脚本语言属于弱类型、面向结构的编程语言,而非面向对象,这就明显产生以下几个问题:

谁可相欹 发表于 2015-3-21 01:21:55

虽然ASP也有很多网络教程。但是这些都不系统。都是半路出家,只是从一个例子告诉你怎么用。不会深入讨论,更不会将没有出现在例子里的方法都一一列举出来。
页: [1]
查看完整版本: ASP网页编程之Asp中怎样计划超过域的Cookie