利用Cookie对象防止重复投票
11.5 在线投票
在线投票系统为网民们参与网上投票活动提供了方便,提高了网民的参与积极性,同时也为网站管理人员提供了宝贵的数据。下面将通过几个实例介绍如何制作网上投票系统。
实例264 利用Cookie对象防止重复投票
实例说明
一些大中型企业,经常在网站的首页设立一项在线投票功能,以便能够及时地了解本企业的产品或客户服务在广大市民心中的地位。为了在投票系统中确保准确率,防止重复投票是一项必不可少的功能。本实例将介绍如何在投票系统中防止重复投票。如图11.18所示,网民可以单击【我要投票】按钮参与投票,如果已投过票,系统将会弹出图11.9所示的对话框,并提醒已投票。如果单击【查看投票结果】按钮,将会看到图11.20所示的投票统计结果。
图11.18 网站调查 |
图11.9 提示对话框 |
图11.20 投票结果 |
技术要点
Cookie提供了一种在Web应用程序中存储用户特定信息的方法。如利用Cookie存储用户登录的IP地址,只要用户在Cookie的有效期内登录网站,网站就可以识别该用户的身份。本实例就是利用这个特性,自定义Cookie对象来防止网民们重复投票。下面介绍Cookie对象的用途和常用属性。
由于Cookie与Web站点直接关联,因此只要用户发出浏览此Web站点中页面的请求,浏览器就会和服务器交换Cookie信息。Cookie对象不隶属于Page对象,而分别隶属于Request对象和Response对象,每一个Cookie变量都被不同的Cookie对象所管理。
Cookie对象完整的类别名称是HttpCookieCollection。
如果保存一个Cookie变量,需要使用Response对象的Cookies集合,语法如下:
Response.Cookies["变量名"].Value="表达式" |
如果读取一个Cookie变量,需要使用Request对象的Cookies集合,语法如下:
username=Request.Cookies["变量名"].Value |
Cookies对象最常用的属性有以下几种。
Expires属性:设定Cookie变量的有效时间,默认1000分钟,若设为0则可以实时删除Cookie变量。
Name属性:Cookie变量的名称。
Value属性:Cookie变量的值。
实现过程
(1)新建一个网站,命名为Ex11_12,默认主页名为Default.aspx。
(2)在页Default.aspx中添加1个Table表格,用来布局页面。在该Table表格上添加1个RadioButtonList控件,以供用户选择投票,再添加2个Button控件,分别用于执行投票和查询投票结果。
(3)创建1个新页Result.aspx,用于显示投票结果。在该页中添加1个GridView控件用于显示投票结果。
(4)主要程序代码。
在页面Default.aspx中,用户单击【我要投票】按扭后,首先判断用户是否已投过票,如果用户已投票,则弹出对话框提示用户;如果用户是第一次投票,则利用Cookie对象保存用户的IP地址,并弹出对话框提示用户投票成功。其代码如下:
//进行投票 |
为了使投票结果更直观,在显示投票结果页Result.aspx中,将投票结果以百分比的形式显示在页面上。实现此功能,需要将页Result.aspx切换到HTML视图中,并将自定义方法FormatVoteCount(string voteCount)绑定在显示框的百分比列中。其代码如下:
<asp:TemplateField HeaderText ="所占总票的百分比" > |
当投票结果显示框绑定时,使用自定义方法FormatVoteCount(string voteCount),将百分比列显示在界面中。其代码如下:
public int FormatVoteCount(string voteCount) |
举一反三
根据本实例,读者可以:
开发只允许内部人投票;
开发只允许某一行业的人员投票。