仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 423|回复: 8
打印 上一主题 下一主题

[学习教程] ASP网页设计怎样在ASP中扫瞄和修正Cookies汇合

[复制链接]
蒙在股里 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:15:05 | 只看该作者 回帖奖励 |正序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
ASP是依赖组件的,能访问数据库的组件好多就有好多种,再有就是你微软的工具可是什么都要收钱的啊!cookie|cookies|汇合Cookies的值比ASP其他汇合(比方Form和ServerVariables)的值要庞大很多。Cookie是一小块由扫瞄器存贮在客户端体系上的文本,且伴同每次哀求发往它们使用于的域中的服务器。

ASP使得使用cookie较为简单,能够从Request工具的Cookies汇合中取得一切伴同哀求收回的cookie值,并可创立或修正cookie,经由过程Response工具的Cookies汇合发还给用户。

Cookie包括可用两种体例机关的信息,单值cookie供应其值给代码是经由过程一个一样平常的类ASP汇合。但是,汇合的每一个成员大概自己也是一个汇合,包括这类信息的cookie经由过程称为多值(multiple-Value)cookie。

创立一个单值的cookie较为复杂,以下所示:
Response.Cookies(“item-name”)=“item-value”
创立一个多值的cookie,可使用以下命令:
Response.Cookies(“item-name”)(“sub-item-name”)=“sub-item-value”
设置cookie使用的域及路径及其无效期,我们利用:
Response.Cookies(“item-name”).domain=“domain-url”
Response.Cookies(“item-name”).path=“virtual-path”
Response.Cookies(“item-name”).expires=#date#
一般,客户只在对创立cookie的目次中的页面提出哀求时,才将cookie随叨教发住服务器。经由过程指定path属性,能够指定站点中那边这个cookie是正当的,而且这个cookie将随哀求发送。假如cookie随对全部站点的页面哀求发送,设置path为“/”。

假设Expires属性没有设置,封闭以后的扫瞄器实例时,cookie将被主动打消。

注重,我们在向扫瞄器发送任何输入时,已创立了cookie。由于,这些cookie是页面HTTP报头的一部分。

在ASP3.0中,缓冲的缺省形态是翻开的,且没有输入被发送,除非利用Response.Flush指定做这个事情大概页面已到末了。这意味着创立cookie的代码能够在页面上的任何地位,直就任何输入“革新”(flush)到客户端前,它都能够被实行。

要读现有的cookie,利用Request.Cookies汇合。能够独自会见个中的项目,办法相似于创立它们时利用的办法。
StrSingleValue=Request.Cookies(“item-name”)

StrSubItemValue=Request.Cookies(“item-name”)(“sub-item-name”)
注重Request.Cookies汇合(和一切其他Request汇合一样)是只读的。Response.Cookies汇合是只写,现实上能够会见这个汇合中一系列cookie的称号,而不是它们的值。

遍历Cookies汇合

为了利用Cookies汇合加倍便利,可以使用称号为Haskeys的附加属性。假设会见的cookie自己也是个汇合,即它是一个多值的cookie,这将前往True。利用Haskeys属性,能够遍历完全的Request.Cookies汇合,从而取得一切cookie的列表及它们的值。
ForEachobjItemInRequest.Cookies
IfRequest.Cookies(objItem).HasKeyThen
‘UseanotherForEachtoiterateallsubkeys
ForEachobjItemKeyinRequest.Cookies(objItem)
Response.WriteobjItem&“(“&objItemKey&“)=“_
&Request.Cookies(objItem)(objItemKey)&“

Next
Else
‘Printoutthecookiestringasnormal
Response.WriteobjItem&“=”&Request.Cookies(objItem)&“

EndIf
Next
  这十分相似于后面的从Request.Form汇合中提取多个值的庞大代码。可是这里可使用Haskeys属性来辨别每一个条目是不是为一个汇合。而在Form例子里,必需查询Request.Form(item_name).Count属性,这是由于Form汇合(和一切的除cookie外的其他汇合)成员不成能是真实的汇合。ASP只是做了“幕后”的事情,失掉了每一个多条目汇合的值。

Form和QueryString的差别

懂得了会见各类ASP汇合的手艺今后,必要办理另外一个成绩是:Form和QueryString汇合之间的差别是甚么?假设筹办利用ASP,毫无疑问应当分明这类差别,但必要参考HTTP事情体例来从头熟悉,了解它们。

经由过程HTTP从Web服务器哀求页面或其他资本,有两个通用的办法。可以使用GET办法间接取得资本,也可以使用POST把值传给响应资本。GET办法是缺省的,能够看一下本章后面的一个HTTP哀求的实例:
7/8/9910:27:16SentGET/Store/Download.aspHTTP/1.1
假设把一个或多个成对的称号/值附在哀求页面的URL后,就酿成哀求的查询字符串,且在QueryString汇合中供应给ASP页面。单击Web页面、Email动静或别的文档的超链接,或在扫瞄器的地点栏中输出地点并按回车,或单击扫瞄器中的Links或Favorites按钮,一切这些都要利用GET办法。

因而,对这些举措中传送值给ASP的独一办法是经由过程QueryString汇合,把值附在URL后。

呈现在Request.QueryString汇合中并被会见的值,与后面看到的Form汇合实例中的事情体例不异。URL和查询字符串的分离:
  1. http://mysite.com/process_page.asp?FirstName=Priscilla&LastName=Descartes
复制代码
能够接纳以下体例会见在QueryString汇合中供应的值:

<Pclass=code>
  1. strFirstName=Request.QueryString(“FirstName”)‘Return“Priscilla”strLastName=Request.QueryString(“LastName”)‘Return“Descartes”strRaw=Request.QueryString‘Return“FirstName=Priscilla&LastName=Descartes”
复制代码
窗体的GET和POST办法

在一个页面内利用段时,能够设置翻开的FORM标志的METHOD属性值为“GET”或“POST”,缺省值为“GET”。假设利用“GET”或省略其属性,扫瞄器将该值绑定在页面一切控件上,成为一个查询字符串,且附在被哀求页面的URL上。

当这个哀求抵达Web服务器时,其值由ASP的Request.QueryString汇合供应。但是,假设设置METHOD属性为“POST”,扫瞄器将值包装进发送服务器的HTTP报头中,经由过程Request.Form汇合供应给ASP。

经由过程来讲,能够在一切的HTML窗体中利用POST办法。但是,扫瞄器或服务器的URL字符串长度存在必定的限定。因而,附有长的字符串大概会引发溢出和某些字符串的字符被截失落。同时,查询字符串呈现在扫瞄器的地点栏和一切的保留的链接和保藏夹中。不但云云,还显现了经由过程Web服务器时在HTTP哀求中不想显现的值,它也大概呈现你的服务器和其他路由服务器的日记文件中。在HTTP哀求报头中的值很少是可见的,而且不呈现在日记文件中。

利用POST办法必要注重的小成绩是,当用户从头下载时,窗体的值将不再保存,其值为空且必需从头输出。但是,当附在URL上时,其值被存储为一个链接,将被保存,因而将呈现在一切的URL与字符串分离的哀求中,这也许是个长处也多是个弱点,这依据使用而定(一些扫瞄器在客户端上可以在必定局限内主动保存一个页面上的值)。

另外一点是URL与查询字符串的分离体不克不及包括任何空格或其他不法字符,不然的话,Navigator和一些其他的扫瞄器将呈现成绩。不法字符是那些用来分开URL和查询字符串的部分,比方“/”、“:”、“?”和“&”(IE可以主动将空格转换为准确的格局――加号“+”,但其他的不法字符不克不及处置)

ASP中的cookie的利用

在这一节我们将进修那些供应给ASP代码利用的汇合、办法和属性的各类手艺。

1)cookie中存储用户的细节情形

可使用cookie来存储这两类值:当扫瞄器封闭时我们不想保留的值(比方用户的注册信息)和在用户会见站点时要保存的值。在每种情形下cookie的值关于来自用户扫瞄器的每一个页面哀求的ASP都是可用的。

但是,必要记着的是,cookie只要在对Cookie中的假造路径(path)内的页面收回哀求时,才会发往服务器。缺省时,假设path的值在cookie中没有设置,则其值为创立cookie的页面的假造路径。为使一个cookie发往一个站点的一切页面,必要利用path=“/”。

这里是个实例,从自界说的Login页面中,将用户的注册信息存贮在一个cookie中,因为没有使用无效期,cookie值仅在封闭这个扫瞄器这前保存:
  1. ...Request.Cookies(“User”)(“UID”)=“<%=Request(“UserName”)%>”Request.Cookies(“User”)(“PWD”)=“<%=Request(“Password”)%>”Request.Cookies(“User”).Path=“/adminstuff”‘Onlyappliestoadminpages...
复制代码

如今,在用户从adminstuff目次或其子目次哀求的每一个页面中,都能够找到这个cookie。假设它不存在,能够将用户重定向到注册页面:
  1. If(Request.Cookies(“User”)(“UID”)“alexhomer”)_Or(Request.Cookies(“User”)(“PWD”)“secret”)ThenResponse.Redirect“login.asp?UserName=”&Request.Cookies(“User”)(“UID”)EndIf...
复制代码

因为把cookie中的用户名放在Response.Redirect的URL查询字符串中,假设在口令输出时呈现毛病且但愿用户不用从头键进用户名,能够在login.asp页面中利用它:
  1. <FORMACTION=”check_user.asp”METHOD=”POST”><INPUTTYPE=”TEXT”NAME=”UserName”VALUE=”<%=Request.QueryString(“UserName”)%>”><P><INPUTTYPE=”SUBMIT”VALUE=”LOGIN”></FORM>
复制代码
2)修正现有的cookie

可使用ASP修正现有的cookie,但不克不及只修正cookie中的一个值。当更新一个在Response.Cookies汇合中的Cookie时,现有的值将丧失。我们能够用以下代码创立一个cookie,可使用:
  1. Response.Cookies(“VisitCount”)(“StartDate”)=dtmStartResponse.Cookies(“VisitCount”)(“LastDate”)=NowResponse.Cookies(“VisitCount”)(“Visits”)=CStr(intVisits)Response.Cookies(“VisitCount”).Path=“/”‘ApplytoentiresiteResponse.Cookies(“VisitCount”).Expires=DateAdd(“m”,3,Now)
复制代码
假设想要更新Visits和LastDate的值,必需先不需改动的一切值,然后重写全部的cookie:

datDtart=Response.Cookies(“VisitCount”)(“StartDate”)
intVisits=Response.Cookies(“VisitCount”)(“Visits”)
Response.Cookies(“VisitCount”)(“StartDate”)=dtmStart
Response.Cookies(“VisitCount”)(“LastDate”)=Now
Response.Cookies(“VisitCount”)(“Visits”)=Cstr(intVisits)
Response.Cookies(“VisitCount”).Path=“/”
Response.Cookies(“VisitCount”).Expires=DateADD(“m”,3,Now+1)且关于几近一切的其他Response办法和属性,应当在写进任何内容(即翻开<HTML>标志或任何文本或其他的HTML)到呼应之前完成这个事情。当然了,现在国内CRM厂商的产品与其说是CRM,但从至少从我的角度分析上来看,充其量只是一个大型的进销存而已了,了解尚浅,不够胆详评,这里只提技术问题
愤怒的大鸟 该用户已被删除
9#
发表于 2015-3-24 07:46:25 | 只看该作者
封装性使得代码逻辑清晰,易于管理,并且应用到ASP.Net上就可以使业务逻辑和Html页面分离,这样无论页面原型如何改变,业务逻辑代码都不必做任何改动;继承性和多态性使得代码的可重用性大大提高。
8#
发表于 2015-3-17 10:52:34 | 只看该作者
ASP.Net和ASP的最大区别在于编程思维的转换,而不仅仅在于功能的增强。ASP使用VBS/JS这样的脚本语言混合html来编程,而那些脚本语言属于弱类型、面向结构的编程语言,而非面向对象,这就明显产生以下几个问题:
只想知道 该用户已被删除
7#
发表于 2015-3-10 21:19:42 | 只看该作者
ASP.Net和ASP的最大区别在于编程思维的转换,而不仅仅在于功能的增强。ASP使用VBS/JS这样的脚本语言混合html来编程,而那些脚本语言属于弱类型、面向结构的编程语言,而非面向对象,这就明显产生以下几个问题:
灵魂腐蚀 该用户已被删除
6#
发表于 2015-3-1 16:52:10 | 只看该作者
Response:从字面上讲是“响应”,因此这个是服务端向客户端发送东西的,例如Response.Write
爱飞 该用户已被删除
5#
发表于 2015-2-10 22:15:42 | 只看该作者
我认为比较好的方法是找一些比较经典的例子,每个例子比较集中一种编程思想而设计的。
金色的骷髅 该用户已被删除
地板
发表于 2015-2-4 22:41:28 | 只看该作者
学习是为了用的,是为了让你的程序产生价值,把握住这个原则会比较轻松点。除此之外,课外时间一定要多参加一些社会实践活动,来锻炼自己的能力。
因胸联盟 该用户已被删除
板凳
发表于 2015-1-26 22:41:24 | 只看该作者
那么,ASP.Net有哪些改进呢?
飘灵儿 该用户已被删除
沙发
发表于 2015-1-19 06:00:39 | 只看该作者
没有坚实的理论做基础,那么我们连踏入社会第一步的资本都没有,特别对于计算机专业的学生学好专业知识是置关重要的。在这里我侧重讲一下如何学习ASP,从平时的学习过程中。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-10-2 10:37

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表