避免表单重复提交 (加一个口令验证码 类似验证码)



1、在静态提交的页面里, 写一个每次刷新产生一个随机数, 存入session  (if(!isset($_session['code'])))。 并放到form表单中,一起提交。


2、在后台提交处理时,判断之前的session里的值是否和提交过的的 input表单的code一样,不一样,则为静态页面又进行了第二次刷新产生了新code。所以和session中不一样。


3、为了不影响下次提交、上传文件使用,  在 判断一样和不一样的同时,将session = null ,保证下一次一样。 可以正常提交。


view

<?php

    $fileSubmit = mt_rand(0,1000000);
    if(!isset($_SESSION['filesubmit'])){
        $_SESSION['filesubmit'] = $fileSubmit;
    }
?>

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="utf-8">
    <title>数据查询</title>
    <!--[if lt IE 9]>
    <script src="{{asset('public/js/html5shiv.js')}}"></script>
    <![endif]-->
</head>

<body style=" overflow-x:scroll; min-width:1600px;" >
<form method="POST" action="" enctype="multipart/form-data" class="act">
    <input type="hidden" name="fileSubmitCode" value="{{$fileSubmit}}">  <span style="font-family:Helvetica, Tahoma, Arial, sans-serif;">//一同提交到后台 </span>
    <input type="hidden" name="status" value="{{$status}}">  //设置一个值 ,<span style="font-family:Helvetica, Tahoma, Arial, sans-serif;">可观察是否重新刷新过,(后台给的值, 一样,不一样</span>

Controller


		$status = '11';
		//page翻页
		$view_page = false;
		$view_table = false;
		if($input = Input::all()){
			//dd($input);
			if(isset($input['page'])){
				$view_page = true;
			}
			if(isset($input['tableid'])){
				$tableId = $input['tableid'];
				$view_table = true;
			}


			//dd($tableId);
		}
		//die();

		$file = Input::file('myfile');
		if(isset($input['fileSubmitCode'])){
			//dump($input['fileSubmitCode']);
			//dump($_SESSION['filesubmit']);


			if($input['fileSubmitCode'] != $_SESSION['filesubmit']){
				//echo "不相等";
				$_SESSION['filesubmit'] = null;
				$status = '0';
				$file = null;  //不相等【即刷新过】 就给<span style="font-family:Helvetica, Tahoma, Arial, sans-serif;">于file为空,认为不是上传,转到别的业务逻辑</span>

			}else{
				//echo "相等";
				$_SESSION['filesubmit'] = null;
				$status = '1';

			}
		}

		//dd($file);
		if($file){
			//dump($file);


//			$realPath = $file
//			$path = $file -> move(app_path().'/storage/uploads');
			$fileSize = round($file->getSize()/1024/1024,2);
			$realPath = $file->getRealPath();
			$original_name = $file->getClientOriginalName();
			$entension =  $file -> getClientOriginalExtension(); //上传文件的后缀.



你可能感兴趣的:(避免表单重复提交 (加一个口令验证码 类似验证码))