不利用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都必须相应处理一下, 而且用户很可能‘一不小心’就溜出了这种跟踪之外。修改起来也过于麻烦。

另一个缺点是针对不同的浏览器必须考虑长度限制,前面章节介绍过这种限制,现在有的浏览器对于过长是截取信息,有的则干脆报错,不过相信这都不是你所希望的。同时安全性没有保证。

利用Formhidden类型进行信息传递

如果你确实需要传递大量信息而又不想选用Session变量,那么您别无选择只有利用FormHidden类型。正如下例:

<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>

方法结合

这两种方法实现起来都十分麻烦而且颇为”费力不讨好”,但是,如果偏要不用CookiesSession变量来传递信息,确实也别无良策。同时,这两种方法确实可以适用于任何浏览器。

请注意,如果在任意一页中没有进行这种QueryString字段或者hidden类型的Form的处理,那么这种跟踪就停止了,不管这是你希望的还是程序上不小心造成的。

注意

一个十分显著的缺点是不管利用QueryString字段还是利用Hidden Form传递 信息,安全性都是毫无保证的,这是由于浏览器对信息的接受是在几乎毫无屏障的情况下进行的。

你完全可以将这两种方法结合起来,而在接受时可以没有任何区别,这里面补充的是,对于Response对象,可以不指定Form集合和QueryString集合来进行接受,这时系统会自动辨认。见下面这个例子:

<HTML>

<HEAD><TITLE>下一页</TITLE></HEAD>

<BODY>

<%

Username=Request(Username)

%>

<!---注:就是上面这个脚本,QueryStringhiddenForm都可以正确接收--->

<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信息。最后,对于那些实在不愿意使用SessionCookie的人们提供了一些替代手段的介绍和讨论。