方法二:利用Cookies對象 因為Cookies對象把變量的值保存在瀏覽器客戶端,所以可以根據Cookies保存的IsVoted的值來判斷用戶是否投過票。Cookies變量和Session變量一樣是私有的,但是如果我們定義了Cookies變量的生存期限,則Cookies變量是公有的,凡是從同一臺機器上登錄的用戶在規定的時間期限沒有達到時,都無法投票,這在一定程度上也能防止反復投票。實現程序流程如圖2: 根據實際情況合理地設置Cookies變量的生存期限的長短,例如設定為10分鐘,這樣一臺機器即使連續投票最多一天也只能投144張票。 此種方法的漏洞:在Windows 9x環境下,只要把 Windows\Cookies目錄下所有*.txt文件刪除,又可重復投票。為了再進一步防止反復投票,下面給出方法三。 方法三:驗證IP地址與登錄時間 此方法首先利用 Request.ServerVariables(REMOTE_ADDR)取得用戶的IP地址。在Web Server端建立一個標準的MDB類型的數據庫,此數據庫有一個表,該表只有兩個字段:IP地址和登錄時間。之所以設置登錄時間這個字段,是考慮到撥號上網用戶可能共用同一個IP地址,如果一個IP 地址只能投一次票,那么顯然不合理。同時,我們還采用方法二同樣的思想,必須每隔一個設定的時間段,同一個IP地址才能再次投票。所以這種方法比方法一、方法二在防止反復投票方面要嚴格得多。其實現的程序流程如圖3: 方法四:小范圍調查 這種方法只適用于小范圍調查,思想與方法三相同,只是把方法三中的 IP地址換成可以唯一代表用戶的字段,如學生證號、工作證號等。這時建立的MDB數據庫只包括兩個字段:證件號碼與IsVoted(其中IsVoted是邏輯型字段, TRUE表示已投過票,FALSE表示還未投票,在建庫時所有記錄的IsVoted的值都設為 FALSE)。在投票之前,要求先輸入正確的證件號碼,然后再判斷IsVoted的值。實現這種方法的程序流程如圖4: 從方法一到方法四,安全性越來越高,防止重復連續投票功能越來越強,但是各種方法都有各自的局限性。在應用中,用戶應根據實際情況選擇合適的方法。如果小范圍投票,方法四無疑是最好的;如果在Internet上投票,方法三是最好的。另外一點必須提及的是:雖然Application有保存變量的功能,但是我們沒有用到。因為 Application變量是一個全局性變量,如果用Application把IsVoted設為TRUE,則任何用戶都無法投票;如果用Application把IsVoted設為FALSE,則任何用戶都可以投票,就沒有任何防范功能了。
|