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;
    }
}


?>
相关推荐
Dovis(誓平步青云)4 分钟前
探索C++标准模板库(STL):String接口的底层实现(下篇)
开发语言·c++·stl·string
海棠一号8 分钟前
JAVA理论第五章-JVM
java·开发语言·jvm
草莓熊Lotso37 分钟前
【数据结构初阶】--算法复杂度的深度解析
c语言·开发语言·数据结构·经验分享·笔记·其他·算法
海的诗篇_1 小时前
前端开发面试题总结-JavaScript篇(二)
开发语言·前端·javascript·typescript
cccc来财1 小时前
Go中的协程并发和并发panic处理
开发语言·后端·golang
狐凄1 小时前
Python实例题:Python计算线性代数
开发语言·python·线性代数
惊鸿一博2 小时前
java_网络服务相关_gateway_nacos_feign区别联系
java·开发语言·gateway
Bruce_Liuxiaowei2 小时前
深入理解PHP安全漏洞:文件包含与SSRF攻击全解析
开发语言·网络安全·php
成工小白2 小时前
【C++ 】智能指针:内存管理的 “自动导航仪”
开发语言·c++·智能指针
sc写算法2 小时前
基于nlohmann/json 实现 从C++对象转换成JSON数据格式
开发语言·c++·json