js与session配合的定时器实现刷新继续保持定时器运行

232 篇文章 0 订阅
68 篇文章 0 订阅

为确保安全一些时间阈值定义在后台,自行实现即可。

一,Html部分

<html>
<head>
    <script src="https://cdn.bootcss.com/jquery/2.2.3/jquery.min.js"></script>
</head>
<body>
<input type="button" value="点击倒计时" id="send"/>
</body>

</html>

<script>
    var i = 30;
    $(function () {
        $.ajax({
            type : "post",
            url : "Index/My/send_time",
            data : {'second' : i},
            success : function (data) {
                console.log(data);
                if (data > 0) {
                    interval(data);
                }
            }
        })
    });

    $('#send').click(function () {
        $.ajax({
            type : "post",
            url : "Index/My/record_time",
            data : {'second' : i, 'click_time' : parseInt(new Date().getTime()/1000)},
            success : function (data) {
                if (data != 0) {
                    interval(i);
                }
                console.log(data);
            }
        })
    });

    // 显示提示文字,禁用提交按钮
    function setTime($t) {
        $button = $("#send");

        $message = $("<span id='message'> <span id='wait'>"+ $t +"</span>秒后可重新发送验证码...</span>");
        $message.insertAfter($button);
        $button.attr("disabled", true);
    }

    function interval($t) {
        setTime($t);
        var wait = document.getElementById('wait');
        var interval = setInterval(function(){
            var time = --wait.innerHTML;
            if(time <= 0) {
                clearInterval(interval);
                $button.attr("disabled", false);
                $message.remove();
            };
        }, 1000);
    }
</script>

二,后端部分:

class My extends Controller
{

    public function send_time()
    {
        session_start();
        $time = input('second');
        $time_diff = time() - (isset($_SESSION['click_time']) ? $_SESSION['click_time'] : time());

        if (isset($_SESSION['click_time']) && $time_diff < 30) {
            $diff = $time  - $time_diff;
            echo $diff;
        } else {
            unset($_SESSION['click_time']);
        }
    }

    public function record_time()
    {
        session_start();
        $second = input('second'); //30
        $click_time = input('click_time'); //本次点击时间
        if (isset($_SESSION['click_time']) && $click_time - $_SESSION['click_time'] < $second) {
            echo 0;
        } else {
            $_SESSION['click_time'] = $click_time;
            echo date('Y-m-d H:i:s', $click_time);
        }
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值