以下方法都比较简单,既可以实现也可以破解。任何有Firebug和一点知识的人都不会眨眼。
以下Javascript使用Mootools,并且我没有检查过它是无bug的。 我知道JQ语法几乎是相同的,而且原始的JS很相似,所以要清楚点。
1)如果表单是通过AJAX提交的,你可以在提交前检查(抱歉,如果我只是说明显而易见)。
var sent = 0;
$('myForm').addEvent('submit', function(){
if(!sent) this.send();
})
这真的很简单,并且在他们重新加载页面之前是非常有效的。
2)添加javascript cookie。 再次,MooTools的:
$('myForm').addEvent('submit', function(){
if(Cookie.read('submitted')){ alert('once only'); return false;}
else{ Cookie.write('submitted', 1); return true; }
})
这会工作,即使用户重新加载页面。
3)添加一个Python会话cookie。 我对Python并不熟悉,但是如果它像php一样,这将比方法2没有优势。在任何情况下,用户都可以使用FireCookie或WebDeveloper Toolbar(或其他浏览器上的equiv's)删除cookie,并重新加载页。
4)添加一个Flash cookie(使用Flex)。这是理想的 - Flash cookies存储在不同的位置,不明显,并且很难删除。唯一的缺点是你需要创建并嵌入一个微小的SWF。
5)将值存储在隐藏字段中,并检查值。 可以将哈希添加到内部链接,以确保即使页面远离导航,该值仍保持填充状态。
6)其他游戏可以为每个访客增加一个URL(或使用htaccess的自定义URL)。
一个瑞士法郎的cookie是上述最好的想法,虽然它可以与其他人结合使用。祝你好运。
谢谢krosenvold。那么如果一个国家是NAT的,那么来自该国的所有访问都显示相同的IP地址?我在哪里可以找到有关哪些国家/地区已NAT的信息? – RexE 2009-04-26 05:55:43
那么他们不会共享一个*单* IP地址,这可能会太有限。期望像整个国家的一个或多个C类网络。据我所知,至少新加坡和泰国是NAT的。我不知道这个信息是否有任何协调的来源;并且事情可能也会改变;) – krosenvold 2009-04-26 06:00:38