不用session的驗證碼

問題:
現在很多大型網站會在首頁上顯示用戶登錄,為瞭防止惡意刷新,都會加上驗證碼,但這樣導致大量session的產生,占用服務器內存。

解決方案:
1. 輸入賬號密碼後提示輸入驗證碼,這個實現簡單不說怎麼做瞭
2. 克服大量session產生,這個解決方案比較復雜,僅僅作為研究玩玩,實際應用還是推薦上面的方案。
步驟一:每次訪問產生一個唯一驗證ID(可以用GUID)和驗證碼,用3DES保存到客戶端
步驟二:服務器端把用戶輸入的驗證碼和3DES裡的驗證碼比較,相等繼續
步驟三:檢測唯一驗證ID近期是否使用過(可以用memcached),沒有使用過繼續
步驟四:把本次的唯一驗證ID保存到近期使用列表中
完成

說明:這個方案通過加密避免瞭大量session維護,但會有額外加密開銷。通過近期使用列表防止同一驗證碼被重復使用,“近期”的時間范圍可以根據實際情況確定。

發佈留言