1. 程式人生 > >實現簡訊驗證碼有效時間

實現簡訊驗證碼有效時間

手機端傳送簡訊驗證碼時,後臺需要記錄生成的校驗碼checkCode,以便和使用者輸入的驗證碼進行匹配,那麼後臺拿到的校驗碼存放在哪裡好呢?

最開始想到的也是比較容易想到的方法是,在user表中建立新使用者,將驗證碼儲存到資料庫,同時記錄下傳送時間,這樣在驗證時將使用者的驗證碼以及驗證的時間和資料庫中的值進行匹配就ok了。

但是,簡訊驗證碼的有效時間比較短,為記錄這個增加額外的欄位總感覺有點浪費,於是我就想到,session不是有有效時間嗎,能不能將checkCode放到session中,然後利用session的有效時間來控制checkCode的有效時間呢?這樣做當然也能達到想要的效果,可是也帶來一個問題,如果將session的有效時間設定成預想的簡訊驗證碼的有效時間,那麼每當客戶端空閒一小段時間之後就需要重新連線伺服器,這對於使用者體驗來說顯然是不友好的。

進一步想到,既然我已經將checkCode放到sesion中,那麼能否在指定的有效時間後將其從session中移除呢?這裡自然就想到了用定時任務來實現。程式碼片段如下:

<code class="hljs java has-numbering" style="display: block; padding: 0px; background: transparent; color: inherit; box-sizing: border-box; font-family: "Source Code Pro", monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal;"><span class="hljs-annotation" style="color: rgb(155, 133, 157); box-sizing: border-box;">@RequestMapping</span>(value = <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"sendMessage"</span>,method = RequestMethod.GET)
    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">public</span> Object <span class="hljs-title" style="box-sizing: border-box;">sendMessage</span>(<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">final</span> HttpServletRequest request){
        String phone=request.getParameter(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"phone"</span>);
        <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">int</span> times=userService.messageSendToday(phone);    <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//二次驗證,單個手機號每日傳送上限</span>
        <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span>(times <= MAX_PER_DAY){
            String checkCode=GenerateRandomCode.createRandomNumber(<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">6</span>);
            <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">final</span> HttpSession httpSession=request.getSession();
            httpSession.setAttribute(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"checkCode"</span>,checkCode);
            CheckCodeMessage checkCodeMessage=<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">new</span> CheckCodeMessage(phone,checkCode);
            <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">try</span> {
                HttpSender.batchSend(checkCodeMessage);
                <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//TimerTask實現5分鐘後從session中刪除checkCode</span>
                <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">final</span> Timer timer=<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">new</span> Timer();
                timer.schedule(<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">new</span> TimerTask() {
                    <span class="hljs-annotation" style="color: rgb(155, 133, 157); box-sizing: border-box;">@Override</span>
                    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">public</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">void</span> <span class="hljs-title" style="box-sizing: border-box;">run</span>() {
                        httpSession.removeAttribute(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"checkCode"</span>);
                        System.out.println(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"checkCode刪除成功"</span>);
                        timer.cancel();
                    }
                },<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">5</span>*<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">60</span>*<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1000</span>);
            } <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">catch</span> (Exception e) {
                e.printStackTrace();
            }
            <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span> <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"redirect:/index.jsp"</span>;
        }
    }</code>

相關推薦

實現簡訊驗證有效時間

手機端傳送簡訊驗證碼時,後臺需要記錄生成的校驗碼checkCode,以便和使用者輸入的驗證碼進行匹配,那麼後臺拿到的校驗碼存放在哪裡好呢? 最開始想到的也是比較容易想到的方法是,在user表中建立新使用者,將驗證碼儲存到資料庫,同時記錄下傳送時間,這樣在驗證時將使用者的驗證碼以及驗證的時間和資料庫中的

遞迴實現獲取簡訊驗證按鈕時間倒計時顯示功能

使用遞迴實現獲取簡訊驗證碼的按鈕時間顯示倒計時功能,程式碼十分簡潔易懂。 具體demo實現: <html> <head> <meta charset="utf-8"> <title></title>

實現簡訊驗證設定有效時長

//TimerTask實現5分鐘後從session中刪除code final Timer timer=new Timer(); timer.schedule(new TimerTask() { @Override

簡訊外掛】微贊微信管理系統如何實現簡訊驗證功能

找到了一家不錯的簡訊外掛,有需要對接的可以檢視學習,在這邊分享一下,有需要的可以詳細看看,瞭解一下。http://www.ihuyi.com/外掛說明本外掛系互億無線針對微贊管理系統簡訊外掛開發,請按以下說明進行安裝,外掛內的所有檔案均為對原檔案的修改,如果你的系統經過二次開發,安裝本外掛之前,請仔細核對修改

【原始碼分享】POSCMS功能如何實現簡訊驗證

對接簡訊的時候發現一家簡訊公司,有些不錯的簡訊驗證碼的外掛,對接起來挺方便的,有需求的可以看一下。http://www.ihuyi.com/ 外掛說明 本外掛系互億無線針對POSCMS V3.2.0 簡訊外掛開發,外掛內的所有檔案均為對原檔案的修改,如果你的系統經過二次開發,安裝本外掛之前,請仔細核對修改

簡訊外掛】 WSTMart多使用者商城如何實現簡訊驗證功能

找到了一家不錯的簡訊外掛,有需要對接的可以檢視學習,在這邊分享一下,有需要的可以詳細看看,瞭解一下。http://www.ihuyi.com/外掛說明本外掛系互億無線針對WSTMart多使用者商城v2.0.0簡訊外掛開發,外掛內的所有檔案均為對原檔案的修改,如果你的系統經過二次開發,安裝本外掛之前,請仔細核對

php+mysql實現簡訊驗證功能

class Sms { const EXPIRE_SEC = 300; // 過期時間間隔 5分鐘 const RESEND_SEC = 60; // 重發時間間隔 const ONE_DAY_FREQ = 10; // 每日向同一個手機號發簡訊的次數

Rxjava 優雅的實現簡訊驗證傳送

廢話不多說直接上程式碼 private fun countDown() { btn_send_code_activity_login.isEnabled = false

轉:Java實現簡訊驗證(阿里雲服務商)

1.先去阿里雲開通簡訊服務: 2.新增模板及簽名:需要稽核,個人賬戶稽核就幾分鐘就OK 先解釋一下模板及簽名: 標準參照:https://help.aliyun.com/document_detail/55324.html?spm=5176.sms-sign.0

Unity利用Mob實現簡訊驗證

       最近一直在研究如何給app更多實用性的功能,在app進行登入或者註冊時,為了方便使用者更加快捷的完成登入功能,所以就決定採用簡訊驗證碼的方式進行驗證登入。在學習的過程中,先使用了Mob的簡訊服務進行簡訊驗證,因為他是免費的,而且不需要提交什麼材料(單純為了

使用twilio+python實現簡訊驗證教程

寫在前面: 這兩天需要在作品中新增一個簡訊驗證碼功能,於是Google了好多文章,但是大多數都是各種平臺的廣告文,我原本想著花幾塊錢買幾十條就行了,結果。。。。。。買別人服務還嫌我是個人使用者,用量又少,不賣。。。。。。當然,阿里騰訊也有簡訊服務,但是流程太麻煩了,還是放棄

Java程式設計師從笨鳥到菜鳥(五十六) java 實現簡訊驗證

方式一: 1、註冊 2、檢視 API 介面 3、獲取簡訊金鑰 4、工具類: SendMsgUtil.java程式碼 package util; import org.apache.commons.httpclient.Header; import org.

Java加騰訊雲實現簡訊驗證功能

一、概要 現如今在日常工作和生活中簡訊驗證碼對於我們來說是非常熟悉的,比較常見的註冊賬號或者交易支付時候,手機會收到一個簡訊驗證碼,我們可以通過驗證碼來有效驗證身份,避免一些資訊被盜。 驗證身份 目前隨著app軟體以及一些電商網站發展,在註冊相關賬號或者支付時候都離不了簡訊驗證碼,通過驗證碼能

Java實現簡訊驗證--(完整教程)

        我們在實現登入註冊的時候,常常用到了簡訊驗證碼校驗,下面給大家簡單介紹阿里雲的簡訊服務平臺。        相關jar包:        aliyun-java-sdk-core-3.2.2.jar(點此下載)        aliyun-java-sdk-d

Spring Boot+Spring Security專案開發(三):實現簡訊驗證登入

說在前面 博主最近會有很多專案跟大家一起分享,做完後會上傳github上的,希望讀友們能給博主提提意見哈哈 這個專案是第三方登入和安全方面的,關於後臺與app和網站的登入連線操作的實戰專案 各位如果可以就給我star哈哈謝謝啦 實

Java PHP Python實現簡訊驗證和國際簡訊群發功能

最近由於公司的業務拓展,需要給國外使用者傳送國際簡訊,像西班牙、葡萄牙、義大利這些國家都要發,還有中國的香港、澳門、臺灣(港澳臺)這些地區也要發,不過現在已經有許多公司提供國際簡訊的業務了,之前使用過雲片的驗證碼業務,順便看到他們也有國際簡訊的業務,並且更重要的

SpringBoot實現簡訊驗證校驗

本文歡迎轉載,轉載請註明出處,謝謝~(作者:喝酒不騎馬 Colton_Null) from CSDN 思路 使用者輸入手機號後,點選按鈕獲取驗證碼。並設定冷卻時間,防止使用者頻繁點選。 後臺生成驗證碼併發送到使用者手機上,根據驗證碼、時間及一串自定義祕鑰生

Nodejs實現簡訊驗證

使用Nodejs的開發者愈來越多,基於Nodejs的後臺開發也多了起來,像簡訊驗證碼、簡訊群發、國際簡訊這些需求,完全可以採用第三方介面來實現,雲片網就提供了這樣的介面。 Nodejs // 修改為您的apikey.可在官網(https://www.

設定session驗證有效時間,定時刪除session中的驗證

contorller.java import java.util.Timer; import java.util.TimerTask; import javax.servlet.http.HttpServletRequest; import javax.servlet.

PHP實現簡訊驗證

手機驗證碼流程: 獲取手機驗證碼事件:正則驗證手機號,將手機號碼和驗證碼作為引數非同步訪問手機驗證碼ajax頁面 手機驗證碼ajax頁面:驗證驗證碼,生成手機驗證碼,生成流水號,引用介面頁面傳送驗證碼,如果成功則將驗證碼資訊寫入資料庫 註冊按鈕事件:將手機號和手機驗證