我目前有一个问题,用户提交一个以上的形式与不同的ip。(增加一个。)我的意思是,用户先使用123.123.123.123, then 123.123.123.124提交表单,然后使用123.123.123.125等提交表单。
我制作了一个MySQL表,用于存储提交时的IP和时间戳(UNIX)。如何使表中存在123.123.123.123等IP,IP为123.123.123.124的用户无法在X分钟内提交表单。
到目前为止,我已经迭代了整个MySQL表,然后检查IP是否匹配。这样做的问题是有很多记录(Roughly 25,000),所以每次有人提交表单时,我都必须遍历25,000个条目,这是相当常见的。
有没有更好的解决方案来使用它?
发布于 2014-11-19 12:55:52
如果您想在以后对IP地址运行查询,请不要将IP地址存储为字符串。使用将它们转换为正确的数字地址
ip2long -将包含(IPv4)网际协议点地址的字符串转换为正确的地址
例如
echo ip2long("123.123.123.123"); //2071690107
echo "\n";
echo ip2long("123.123.123.124"); //2071690108注意到模式(1+)了吗?现在,您可以轻松地比较这两个值,并在该值上创建索引,这样您的数据库就不必扫描所有的表。
一旦您获得该格式的IP地址,您就可以编写一些简单的数学公式来检查您愿意检查的适当子网范围。
发布于 2014-11-19 12:57:10
IPv4地址可以表示为32位整数,MySQL可以使用函数INET_ATON()进行转换,或者您可以使用ip2long()函数转换和比较if是否在给定范围内。
https://stackoverflow.com/questions/27009185
复制相似问题