Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP+;受IP限制的MySQL投票系统_Php_Mysql_Voting - Fatal编程技术网

PHP+;受IP限制的MySQL投票系统

PHP+;受IP限制的MySQL投票系统,php,mysql,voting,Php,Mysql,Voting,我需要实现一个匿名投票系统(用户注册是不允许的)。我已经决定,最好的选择是将单个项目的投票限制为每IP 10票(考虑到学校等) 最好的解决办法是什么。我正在使用PHP+MySQL。在高峰时段,每秒最多可能有20张选票。我使用负载平衡前端和专用MySQL服务器 我担心的是在数据库中为每一次投票插入一行,然后查询这些数据,看看它们是否达到了限制,这对服务器来说可能太难处理了 我看MongoDB什么的会更好吗 还有其他想法吗?我建议将“投票”状态保存在cookie中。这将允许整个学校和办公室进行投票。

我需要实现一个匿名投票系统(用户注册是不允许的)。我已经决定,最好的选择是将单个项目的投票限制为每IP 10票(考虑到学校等)

最好的解决办法是什么。我正在使用PHP+MySQL。在高峰时段,每秒最多可能有20张选票。我使用负载平衡前端和专用MySQL服务器

我担心的是在数据库中为每一次投票插入一行,然后查询这些数据,看看它们是否达到了限制,这对服务器来说可能太难处理了

我看MongoDB什么的会更好吗


还有其他想法吗?

我建议将“投票”状态保存在cookie中。这将允许整个学校和办公室进行投票。每IP 10次投票将允许一个地址的单个用户投票10次


显然有很多方法可以解决这个问题,比如清除cookies等等,但我认为这是一个不错的选择。

我建议将“投票”状态保存在cookie中。这将允许整个学校和办公室进行投票。每IP 10次投票将允许一个地址的单个用户投票10次


有明显的方法,比如清理cookies等,但是我认为这是一个很好的选择。

只需确保索引IP字段,并将其表示为字符串以外的其他内容(例如整数)。有关更多详细信息,请参见此处:

此外,阿德劳森的饼干创意也不错。您可以同时使用这两种方法,也许可以让IP地址触发一个警报,您可以进入某个管理屏幕,确定这些IP看起来是否像是试图欺骗系统的人,而不是学校

关于ipv6的更新:我不太了解ipv6以及当前的网络主机,所以不确定是否有用户专门使用ipv6。如果是这样,你可以考虑这些帖子中的一些想法来存储它们:


只需确定IP字段的索引,并考虑将其表示为字符串以外的其他内容(例如整数)。有关更多详细信息,请参见此处:

此外,阿德劳森的饼干创意也不错。您可以同时使用这两种方法,也许可以让IP地址触发一个警报,您可以进入某个管理屏幕,确定这些IP看起来是否像是试图欺骗系统的人,而不是学校

关于ipv6的更新:我不太了解ipv6以及当前的网络主机,所以不确定是否有用户专门使用ipv6。如果是这样,你可以考虑这些帖子中的一些想法来存储它们:


我认为关键/价值数据库在这里会更好。
此外,您不需要为每个投票都排一行,每个IP只需要1行,并使用queryes

INSERT INTO .. ON DUPLICATE KEY UPDATE

我认为关键/价值数据库在这里会更好。
此外,您不需要为每个投票都排一行,每个IP只需要1行,并使用queryes

INSERT INTO .. ON DUPLICATE KEY UPDATE

正如您所描述的,负载平衡应该很好。一个专用的MySQL服务器应该不会有任何问题。我不认为MongoDB能解决这样的问题。像memcached这样的东西性能更高,但是您仍然需要在某个时候将数据发送到更持久的MySQL数据库


我同意adlawston使用cookies代替。您仍然可以从单个IP中获得投票的上限,正如您所描述的,负载平衡应该可以。一个专用的MySQL服务器应该不会有任何问题。我不认为MongoDB能解决这样的问题。像memcached这样的东西性能更高,但是您仍然需要在某个时候将数据发送到更持久的MySQL数据库

我同意adlawston使用cookies代替。你仍然可以有一个上限的投票,可以从一个单一的IP

我需要实现一个匿名投票系统(用户注册是一个简单的过程) 禁止通行)

IP不是解决这个问题的方法,因为很多公司/学校都有几千人映射到几个IP地址。如果您不希望用户因为匿名投票而登录,我建议您使用CAPTCHA(recaptcha)来保护大众投票,因为熟练的程序员可以绕过所有其他技术。甚至有可能。我相信在很多Linux发行版中,你可以很容易地欺骗IP

alfred@alfred-laptop:~/bash$ apt-cache search ^fake$
fake - IP address takeover tool
:

还建议设计网络协议和服务,以便 他们不依赖IP源地址进行身份验证

但是一个熟练的程序员不能绕过像recaptcha这样经过良好测试的CAPTCHA。投票有点难,但在我看来,这是对付虚假投票的唯一办法。此外,验证码也不能使投票系统不受错误投票的影响。建立这样一个系统的唯一方法是使用身份验证。保留允许投票的用户(身份)列表

最好的解决办法是什么。我正在使用PHP+MySQL。在期间 高峰时间可能是每秒20票

这甚至不会出汗,因为它的速度快得离谱

Redis是一个开源的高级键值存储。经常是这样 称为数据结构服务器,因为键可以包含字符串, 哈希、列表、集合和排序集合

首先是我的系统信息。我喜欢,但它已经很旧了

-Computer-
Processor       : 2x Intel(R) Core(TM)2 Duo CPU     T7100  @ 1.80GHz
Memory      : 2051MB (1403MB used)
Operating System        : Ubuntu 10.10
User Name       : alfred (alfred)
Date/Time       : Sat 16 Jul 2011 07:53:20 PM CEST
-Display-
Resolution      : 1280x800 pixels
OpenGL Renderer     : Unknown
X11 Vendor      : The X.Org Foundation
-Multimedia-
Audio Adapter       : HDA-Intel - HDA Intel
-Input Devices-
 Power Button
 Lid Switch
 Sleep Button
 Power Button
 AT Translated Set 2 keyboard
 Dell Dell USB Keyboard
 Logitech Trackball
 PS/2 Logitech Wheel Mouse
 Video Bus
-Printers (CUPS)-
Canon-MP150     : <i>Default</i>
HP-Photosmart-b110
-SCSI Disks-
HL-DT-ST DVDRAM GSA-T20N
ATA WDC WD1600BEVS-2
-计算机-
处理器:2倍Intel(R)Core(TM)2双CPU T7100@1.80GHz
内存:2051MB(已使用1403MB)
操作系统:Ubuntu 10.10
用户名:阿尔弗雷德(阿尔弗雷德)
日期/时间:2011年7月16日星期六晚上7:53:20 CEST
-展示-
分辨率:1280x800像素
OpenGL渲染器:未知
X11供应商:X.org基金会
-多媒体-
音频适配器:HDA英特尔-HDA英特尔
-输入设备-
电源按钮
盖开关
睡眠按钮