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


?>
相关推荐
bdgtd881788 小时前
动态修补C扩展模块的函数指针有哪些风险?安全的修补方案是什么?
c语言·开发语言·安全
luquinn8 小时前
实现统一门户登录跳转免登录
开发语言·前端·javascript
Forward♞8 小时前
Qt——界面美化 QSS
开发语言·c++·qt
小白银子11 小时前
零基础从头教学Linux(Day 20)
linux·运维·服务器·php·国安工程师
##学无止境##11 小时前
解锁Java分布式魔法:CAP与BASE的奇幻冒险
java·开发语言·分布式
做一位快乐的码农11 小时前
基于Spring Boot的旅行足迹分享社区的设计与实现/基于java的在线论坛系统
java·开发语言·spring boot
code bean15 小时前
【C#】获取不重复的编码(递增,非GUID)
开发语言·c#
阿里嘎多哈基米16 小时前
二、JVM 入门——(三)栈
java·开发语言·jvm·线程·
雷达学弱狗16 小时前
anaconda本身有一个python环境(base),想用别的环境就是用anaconda命令行往anaconda里创建虚拟环境
开发语言·python
燃尽余火16 小时前
Knife4j 文档展示异常的小坑
java·开发语言·spring