php防止页面重复刷新或者重复提交

2.核心代码

显示的逻辑:

bash 复制代码
//获取防止刷新的唯一标识符,start
$intFlag = substr(md5(time()),6);
$strFlag = 'BAOXIAOSS_'.$my_user_id.$intFlag;
$smarty->assign('check_is_agin_post', $strFlag);
//获取防止刷新的唯一标识符,end

注意:前端页面提交加入这个变量。

下面是提交的逻辑

//校验是否重复提交,start
if(!empty($post_data['check_is_agin_post']))
{
    $check_is_agin_post = $_COOKIE[$post_data['check_is_agin_post']];

    if(!empty($check_is_agin_post))
    {
     
        die('提交重复');
        
    }
    setcookie($post_data['check_is_agin_post'], 1, time()+10);
}
//校验是否重复提交,end

$request_url = db_url::getRequestUrlData();
$links = array(
    array('href' =>$request_url['HTTP_REFERER'], 'text' => '返回')
);

3.类的方法

bash 复制代码
<?php

class db_url
{
    static public $status_arr = array(
    );


    //获取请求的url
    static function getRequestUrl()
    {
        //获取当前完整url,为了清晰,多定义几个变量,分几行写
        $scheme = $_SERVER['REQUEST_SCHEME']; //协议
        $domain = $_SERVER['HTTP_HOST']; //域名/主机
        $requestUri = $_SERVER['REQUEST_URI']; //请求参数
        //将得到的各项拼接起来
        $currentUrl = $scheme . "://" . $domain . $requestUri;
        return $currentUrl; //传回当前url

    }

    //返回请求URl的多个数据
    static function getRequestUrlData()
    {
        //获取当前完整url,为了清晰,多定义几个变量,分几行写
        $scheme = $_SERVER['REQUEST_SCHEME']; //协议
        $domain = $_SERVER['HTTP_HOST']; //域名/主机
        $requestUri = $_SERVER['REQUEST_URI']; //请求参数
        //将得到的各项拼接起来
        $currentUrl = $scheme . "://" . $domain . $requestUri;

        $return_data = [
            'REQUEST_SCHEME'=>$_SERVER['REQUEST_SCHEME'],
            'HTTP_HOST'=>$_SERVER['HTTP_HOST'],
            'HTTP_REFERER'=>$_SERVER['HTTP_REFERER'],
            'REQUEST_URI'=>$_SERVER['REQUEST_URI'],
            'url'=>$currentUrl,
        ];

        return $return_data; //传回当前url

    }


    //获取url的参数返回数组
    static function getParams($url)
    {
        $arr = parse_url($url);
        $arr_query = self::convertUrlQuery($arr['query']);

        return $arr_query?$arr_query:[];
    }


    static function convertUrlQuery($query)
    {
        $queryParts = explode('&', $query);
        $params = array();
        foreach ($queryParts as $param) {
            $item = explode('=', $param);
            $params[$item[0]] = $item[1];
        }
        return $params;
    }
    /**
     * 将参数变为字符串
     * @param $array_query
     * @return string string 'm=content&c=index&a=lists&catid=6&area=0&author=0&h=0&region=0&s=1&page=1' (length=73)
     */
    static function getUrlQuery($array_query)
    {
        $tmp = array();
        foreach($array_query as $k=>$param)
        {
            $tmp[] = $k.'='.$param;
        }
        $params = implode('&',$tmp);
        return $params;
    }
}


?>
相关推荐
终是蝶衣梦晓楼43 分钟前
HiC-Pro Manual
java·开发语言·算法
前端_yu小白1 小时前
Vue2实现docx,xlsx,pptx预览
开发语言·javascript·ecmascript
Pocker_Spades_A1 小时前
从 0 到 1 开发图书管理系统:飞算 JavaAI 让技术落地更简单
java·开发语言·java开发·飞算javaai炫技赛
郝学胜-神的一滴1 小时前
对于类似std::shared_ptr但有可能空悬的指针使用std::weak_ptr: Effective Modern C++ 条款20
开发语言·c++·程序人生·系统架构
linux修理工2 小时前
使用 SecureCRT 连接华为 eNSP 模拟器的方法
服务器·开发语言·php
若水晴空初如梦2 小时前
QT聊天项目DAY17
开发语言·qt
Murphy_lx2 小时前
C++ stdset 与 stdmultiset 深度比较
开发语言·c++
LZQqqqqo2 小时前
C# 事件Event
开发语言·c#
ZeroNews内网穿透2 小时前
ZeroNews内网穿透安全策略深度解析:构建企业级安全连接体系
java·运维·服务器·网络·python·安全·php
样子20183 小时前
PHP 之使用HTMLPurifier过滤XSS
开发语言·前端·php·xss