不利用

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的人们提供了一些替代手段的介绍和讨论。