以下方法都比較簡單,既可以實現也可以破解。任何有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