不利用
Cookie来保持信息其实这部分也是老调重弹,前面章节已经介绍过
QueryString字段的使用及接收,以及Form的接收,其实这两种手段也可以进行一些信息保存,最后我们会对这三种方案进行综合比较。利用QueryString来保持信息
第15章中有关小节有所介绍,由于你可以在连接中添加任何QueryString字段,那么,只要你在网站的所有连接中添加一个保存用户某种信息的字段,再在各个程序上进行相应处理,就可以进行模拟的跟踪,如下例:<HTML>
<HEAD><TITLE>Query
字段进行信息保留</TITLE></HEAD><BODY>
<%
Username=Server.URLEncode(
“Bill Gates”)%>
<A Href=
”/nextpage.asp?<%=UserName%>”>点击这里</a></BODY>
</HTML>
这个脚本将Bill Gates赋值给Username的变量,然后将它通过QueryString传递给nextpage.asp,那么在Nextpage.asp中你就可以接受然后继续进行这个参数的传递。例如:下面就是Nextpage.asp的一个示例:<HTML>
<HEAD><TITLE>Next Page</TITLE></HEAD>
<BODY>
<%
Username=Server.URLEncode(
“Request.QueryString(“Username”))%>
<A HREF=
”/thirdpage.asp?<%=Username%>”>点击这里</a></body>
</html>
这个优点是显然适用于任何浏览器,但是必须承认,这样传递来保存信息实在太麻烦了,所有的连接都要考虑到,每一个Active Server Pages都必须相应处理一下, 而且用户很可能‘一不小心’就溜出了这种跟踪之外。修改起来也过于麻烦。 另一个缺点是针对不同的浏览器必须考虑长度限制,前面章节介绍过这种限制,现在有的浏览器对于过长是截取信息,有的则干脆报错,不过相信这都不是你所希望的。同时安全性没有保证。利用Form的hidden类型进行信息传递
如果你确实需要传递大量信息而又不想选用Session变量,那么您别无选择只有利用Form的Hidden类型。正如下例:<HTML>
<HEAD><TITLE>Form
传参示例</TITLE></HEAD><BODY>
<%
Username=
”Bill Gates”%>
<FORM METHOD=
”Post” Action=”/nextpage.asp”><INPUT Name=
”Username” TYPE=”HIDDEN” VALUE=”<%=Username%>”><input type=
”submit” name=”下一页”></Form>
</Body>
</HTML>
这个主页包括一个HTML Form。其中有一个隐含类型名字为Username, 同时赋予Username变量的值。这个Form也有一个Submit按钮。当按钮点击后,在hiden类型中存放的Username的值将传递到下一个主页上。在下一个主页进行处理,然后以同样方式传递到另外一个新的主页上,下面是nextpage.asp的例子:<HTML>
<HEAD><TITLE>
下一页</TITLE></HEAD><BODY>
<%
Username=Request.Form(
“Username”)%>
<FORM METHOD=
”Post” Action=”/thirdpage.asp”><input name=
”Username” Type=”hidden” Value=”<%=Username%>”><input type=submit value=
”再下一页”></Form>
</Body>
</Html>
方法结合
这两种方法实现起来都十分麻烦而且颇为”费力不讨好”,但是,如果偏要不用Cookies和Session变量来传递信息,确实也别无良策。同时,这两种方法确实可以适用于任何浏览器。 请注意,如果在任意一页中没有进行这种QueryString字段或者hidden类型的Form的处理,那么这种跟踪就停止了,不管这是你希望的还是程序上不小心造成的。注意
一个十分显著的缺点是不管利用QueryString字段还是利用Hidden Form传递 信息,安全性都是毫无保证的,这是由于浏览器对信息的接受是在几乎毫无屏障的情况下进行的。 你完全可以将这两种方法结合起来,而在接受时可以没有任何区别,这里面补充的是,对于Response对象,可以不指定Form集合和QueryString集合来进行接受,这时系统会自动辨认。见下面这个例子:<HTML>
<HEAD><TITLE>
下一页</TITLE></HEAD><BODY>
<%
Username=Request(
“Username”)%>
<!---
注:就是上面这个脚本,QueryString和hidden的Form都可以正确接收---><Form Method=
”Post” Action=”/nextpage.asp”><input name=
”Username” Type=”Hidden” Value=”<%=Username%>”><input type=Submit value=
”下一页”></FORM>
<a href=/nextpage.asp?<%=ServerURLEncode(Username)%>
点击这里</a></BODY>
</HTML>
在这个例子中,变量Username被赋值而无须知道上一页是利用的Hidden form域 还是QueryString来传递参数。在以后编制Active Server Pages时,这种 Request(“Username”)形式的简易调用将十分常用。总结
在这章里面,你应当学到了怎样利用Sessions进行信息处理,首先你学到的是创建一个Session和用它在多主页间存储和传递信息,同时你应当掌握在Session开始和结束时创建相应脚本程序,这样做对于进行统计太重要了。同时,你还学会了和Session密切相关的,创建和读取Cookies信息。最后,对于那些实在不愿意使用Session和Cookie的人们提供了一些替代手段的介绍和讨论。