【说明】
某出版社用ASP实现了一个图书性能评价在线投票网页,主页文件名为“index.asp”,用IE打开该网页后的效果如图8-11所示。
程序中使用的Access数据表结构见表8-9。
【index.asp文档的内容】
<html>
<head>
<title>在线投票页面</title>
<%
Set cnn=Server.CreateObject("ADODB.Connection")
Set rec=Server.CerateObject("ADODB.Recordset")
cnn. ConnectionString="Driver=Microsoft Access Driver(*.mdb);
Uid=;Pwd=;DBQ="&Server.MapPath("data.mdb")
cnn. (1)
dim rsq1
nq1= (2)
rec.open rsq1,cnn,3,3
rec. movefirst()
%<>
</head>
<body>
<form name="piao"action="results.asp"method="post">
<table width="237" border=-"1" align="center">
<tr>
<td valign=top width="216”>
<p align="center"> (3)
</td>
</tr>
<tr>
<td valign=top width="216">
<font size="2">
(4)
<% dim num
num=0
do while not rec. eof
num=num+1
%>
<%
rec. (5)
loop
%>
</font>
</td>
</tr>
<tr>
<td valign=top width="216">
<input name="submit00" type="submit" id="submit00" value=“投 票”>
<input name="submit01" type="submit" id="submit00" value=“结 果”>
</td>
</tr>
</table>
</body>
</html>
【问题3】
为了防止重复投票,图8-11在线投票页面的过滤机制拟采用Cookies对象,而不使用Session对象。这种做法是否妥当请用150字以内的文字简要说明理由。
参考答案:妥当。因为Session对象将浏览者信息记录在服务器端,其生命周期消失于浏览者在一定时间内没有再与服务器端联系,或客户浏览器关闭。而Cookies对象则会借助浏览器的Cookies功能将信息记录在客户端,这些相关信息会被重复读取和利用,同时也可避免服务器的系统资源浪费
解析:这是一道要求读者掌握Cookies对象与Session对象区别的分析理解题。本题所涉及的知识点如下。
ASP提供了请求(Request)对象、响应(Response)对象、工作阶段(Session)对象、应用程序(Application)对象、服务器(Server)对象、Cookies对象等6个内嵌对象,无须建立就可以在指令中直接访问和使用它们。其中的服务器(Server)对象可加载其他组件,从而可以进一步扩展ASP的功能。
Session对象是一个将浏览者信息记录在服务器端的对象,每一个连接者都可以在服务器端拥有属于自己的独立Session对象。由于Session对象的生命周期消失于浏览者在一定时间内没有再与服务器端联系,或者是浏览者的浏览器关闭,因此这两个因素会使防止重复投票过滤机制失效,而出现做票的漏洞。
Cookies对象则会借助浏览器提供的Cookies功能将信息记录在客户端,也就是说每个浏览者的相关信息记录在自己的机器中。当浏览者的浏览器关闭,或是在一定时间内没有再与服务器端联系,这些信息都不会消失。当浏览器再度被启用时,这些相关信息会被再度读取和利用。
防止重复投票过滤机制使用Cookies对象还可以避免Web服务器的系统资源浪费问题。因为使用 Cookies对象的浏览者信息记录在客户端自己的机器中,而Session对象的浏览者信息记录在服务器端。
另外说明一点,在实际应用时,使用Cookies对象只能减少做票的行为发生。因为浏览者可以通过清除其浏览器的Cookies文件而重新投票,或者是使用不同的浏览器进行重复投票。如果利用服务器数据库记录连接者的IP地址,并将已连接投票的IP地址暂时锁定,则可以进一步减少重复投票的现象。