亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

短信驗證清理驗證碼

短信驗證清理驗證碼

墨色風雨 2019-03-13 14:15:05
java后臺關于短信驗證碼的問題本想把驗證碼放到session中,一提出就被否決了。說不好管理。因為時效只有兩分鐘?,F在方案是這樣的 兩個map 以輸入文本框的手機號碼為key 值。 分別放入 截至時間 和 驗證碼。然后通過第三短信平臺發送的驗證碼和現在對比做邏輯。 問題是。假日2分鐘后沒人輸入驗證碼。重新發送的驗證碼要失效才行。我本想寫個定時器的 但是2分鐘內它一直開著。如果同一時間。其他人就沒法操作了 。希望給位指導下 別說redis。不會它?;蛘叽蠹医o個解決方案吧 什么時候清除合適
查看完整描述

4 回答

?
白衣染霜花

TA貢獻1796條經驗 獲得超10個贊

  1. 設置一個有效期長量,如 120 秒

  2. 用戶申請短信驗證碼

  3. 服務端根據用戶的手機號創建記錄:創建時間、手機號、驗證碼、激活狀態(默認為否)

  4. 提交第 3 方短信平臺(如果有必要等結果再對條目的狀態做標記,那就另說)

  5. 用戶提交驗證,服務端讀取『手機號+驗證碼』及創建時間倒序的第 1 條,,

    1. 過期,直接駁回

    2. 沒過期,繼續下面的業務,將數據庫里條目狀態標記為已激活

    1. 如不存在,直接駁回(可能被刪了,也可能是手機號碼、驗證碼之一不正確)

    2. 如已存在,檢查過期時間(用戶提交時間-條目創建時間是否小于等于 120 秒)

與此同時,跑一個定時腳本,每隔 10 分鐘啊 20 分鐘去刪數據:

  1. 已驗證的。

  2. 距離腳本操作時間大于 120 秒或更長時間的;

希望有用。


查看完整回答
反對 回復 2019-04-24
?
繁花不似錦

TA貢獻1851條經驗 獲得超4個贊

Redis清除過期緩存就兩種辦法:

  1. 根據key獲取value時判斷是否過期

  2. 通過一個過期隊列(根據過期時間排序)來清除過期數據

所以對于驗證碼這種也可以考慮這么做:
方案一: 在輸入驗證碼之后,判斷驗證碼是否正確的時候,如果驗證碼正確,判斷一下驗證碼是否過期。
方案二: 將手機號碼,驗證碼存儲到一個Map中,同時將手機號碼,過期時間存儲到DelayQueue中。另起一個線程,不斷地從DelayQueue中獲取元素,將獲取到的元素從Map刪除。

這兩個方案可以同時都用,或者只用其一。

DelayQueue: 延時隊列,Blocking隊列,內部實現是用一個Priority隊列,以延遲時間作為比較的依據。只有達到延遲時間之后元素才可以被獲得,可用于清除空閑連接,過期緩存,超時任務等(例如緩存,將緩存對象放到DelayQueue中,delay時間等于緩存過期時間,運行一個deamon線程從DelayQueue中獲取元素,然后將其清除)。


查看完整回答
反對 回復 2019-04-24
?
吃雞游戲

TA貢獻1829條經驗 獲得超7個贊

你直接試試SUBMAIL短信平臺吧。在線發送就可以,他們這個平臺本身就能設置定時。


查看完整回答
反對 回復 2019-04-24
  • 4 回答
  • 0 關注
  • 423 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號