2012-11-16 58 views
0

我正在開發一個投票網站,我只希望選民投票一次。這是一個3階段的過程。第一頁是選擇你想爲第二頁投票的人確認該人(隱藏的單選按鈕提交投票),第三頁是感謝頁面。我想檢查第一頁和第二頁上的cookie並在第三頁上寫入cookie。我希望cookie在第一次導航到網站後的兩天內過期。我想將已投票的人重定向到cookie.htm(與其他所有文件夾位於同一文件夾中)您將如何執行此操作?Javascript只投票一次Cookies

+3

很好。我想要一杯啤酒和一個漢堡包。問題是什麼? –

+6

我建議你使用服務器端執行此任務(基於IP地址)。設置和閱讀不是很可靠,因爲用戶可以清除cookie並重新投票。 –

+0

這將被用作我在學校舉行的歌唱比賽的iPhone調查。投票時間爲五分鐘。我只是想設法阻止人們再次投票。我無法做IP,因爲所有的iPhone/iPod Touch都會連接到相同的熱點(約500臺設備)。 – rn10950

回答

0

我認爲它基於來自某個已知網站的電子郵件地址,並要求有人確認電子郵件地址可能是您最好的選擇。

0

我認爲你最好的選擇是有一個註冊過程並強制用戶登錄投票。正如評論中提到的,你需要一些服務器端的魔法。

+0

問題是,它將被用於一次性使用,所以真的沒有使用/註冊/登錄的時間 – rn10950

+0

那麼你不能保證用戶只會投一次。如果我清除了我的cookies,會怎樣? – simonlchilds

+1

該網站將在iPhone上使用,除此之外,人口統計可能不知道如何清除cookie,更不用說知道它們是什麼。 – rn10950

0

要使用Javascript設置cookie,請將document.cookie對象設置爲[cookiename]=[cookievalue];expires=[expirydate]格式的字符串值。在這種情況下,似乎你只需要設置一個cookie,任何cookie,所以也許只是「完成=真」或其他。

// get today's date plus 2 days 
var expiration = new Date(); 
expiration.setDate(expiration.getDate() + 2); 

// add cookie "done=true" with expiration 
document.cookie="done=true;expires=" + expiration.toUTCString(); 

要檢查一個cookie已經設置,再次使用document.cookie,這將返回所有Cookie的分號分隔的列表。過濾它來找到你:

var myCookie = document.cookie.split(';').filter(function(item) { 
    return item.split('=')[0] == 'done'; 
}); 

如果Cookie設置,那麼你可以做一個簡單的重定向:

if (myCookie.length > 0) { 
    window.location = "cookie.htm"; 
} 

見MDN進一步info on cookies


強制性免責聲明:很明顯 - 正如其他人指出的那樣 - 使用這種方法,用戶將能夠如果他們不在乎欺騙,因爲任何人都可以只明確自己的餅乾和繞過檢查。即使您認爲沒有人會打擾,只需在服務器上添加「完整性檢查」,並阻止任何投票次數超過X次的IP地址即可。