防止网站重复投票
2014-04-25 08:25
309 查看
利用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="表达式" |
username=Request.Cookies["变量名"].Value |
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地址,并弹出对话框提示用户投票成功。其代码如下:
//进行投票 protected void Button1_Click(object sender, EventArgs e) { //判断指定的IP是否已投过票了,如果已经投过了,则弹出提示对话框 string UserIP = Request.UserHostAddress.ToString( ); int VoteID = Convert.ToInt32(RadioButtonList1. SelectedIndex.ToString( ))+1; HttpCookie oldCookie=Request.Cookies["userIP"]; if (oldCookie == null) { UpdateVote(VoteID); Response.Write("<script>alert('投票成功, 谢谢您的参与!')</script>"); //定义新的Cookie对象 HttpCookie newCookie = new HttpCookie("userIP"); newCookie.Expires = DateTime.MaxValue ; //添加新的Cookie变量IPaddress,值为UserIP newCookie.Values.Add("IPaddress", UserIP); //将变量写入Cookie文件中 Response.AppendCookie(newCookie); return; } else { string userIP = oldCookie.Values["IPaddress"]; if (UserIP.Trim( ) == userIP.Trim( )) { Response.Write("<script>alert('一个IP地址 只能投一次票,谢谢您的参与!');history.go(-1);</script>"); return; } else { HttpCookie newCookie = new HttpCookie("userIP"); newCookie.Values.Add("IPaddress", UserIP); newCookie.Expires = DateTime.MaxValue ; Response.AppendCookie(newCookie); UpdateVote(VoteID); Response.Write("<script>alert('投票成功, 谢谢您的参与!')</script>"); return; } } } |
<asp:TemplateField HeaderText ="所占总票的百分比" > <ItemTemplate> <%#FormatVoteCount(DataBinder.Eval(Container.DataItem, "NumVote").ToString ( ))%>% </ItemTemplate> </asp:TemplateField> |
public int FormatVoteCount(string voteCount) { int total = TotalNum( ); //如果投票没有被投票 if (voteCount.Length <= 0) { //返回0个百分比 return(0); } if (total > 0) { //返回实际的百分比 return (int.Parse(voteCount)*100/total); } return (0); } |
根据本实例,读者可以:
开发只允许内部人投票;
开发只允许某一行业的人员投票。
相关文章推荐
- 用cookies实现防止重复投票
- 关于防止重复刷投票的个人观点
- 关于防止重复刷投票的个人观点
- struts中,防止F5刷新,造成重复投票方法
- 投票系统之防止重复投票
- cookie保存IP防止重复投票
- 投票系统之防止重复投票
- 防止网上重复投票的方法
- 防止表单重复提交
- js防止表单重复提交
- 网站内容优化之若何克制重复内容
- 防止表单多次提交,添加重复数据
- #define#ifndef#endf 防止头文件重复包含,心得,供大家参考
- Asp.Net防止刷新重复提交数据小记
- 防止快速连续点击按钮重复提交数据之二(定时器实现)
- Redis辅助构建投票网站后台
- 表单防止页面重复提交方法
- asp.net 防止重复提交
- 防止表单重复提交
- PHP防止刷新重复提交页面的示例代码