1. 程式人生 > >解決 php提交表單到當前頁面,重新整理會重複提交 的問題

解決 php提交表單到當前頁面,重新整理會重複提交 的問題

下午有一個朋友問我這個問題,其實解決辦法很簡單:

只需要在表單裡生成一個token(隨機字串),然後用個input裝起來,設定hidden。第一次post處理完資料後把token存入session,接下來每次post判斷一下token跟session中的一不一樣,一樣則說明資料處理過了。

下面是我用php寫的簡單demo,直接執行一下就可以了

<?php
session_start();

//讀取伺服器端的session_id,如果沒有的話賦值為-1
$session_id = empty($_SESSION['session_id']) ? -1 : $_SESSION['session_id'];

//讀取客戶端的post_id,如果沒有的話賦值為-2
$post_id = empty($_POST['post_id']) ? -2 : $_POST['post_id'];

//判斷兩個id是否相同,相同則說明已經處理過一次,不同則進行處理
if($session_id == $post_id){
	
	echo "<h1>已經處理過了,不管了</h1>";
	
}else{
	
	//如果頁面還沒有提交過表單,則顯示錶單,否則處理post過來的資料
	if($post_id == -2){		
?>
<html>
	<body>
		<form action="index.php" method="post">
			<input type="text" hidden="hidden" name="post_id" id="" value="<?php echo rand(1, 999999); ?>" />
			<input type="text" name="test" id="test" value="" />
			<input type="submit" value=""/>
		</form>
	</body>
</html>	
<?php		
	}else{
		
		echo "<h1>正在處理</h1>";
		
		//處理過後吧post_id存入session,方便下次比較
		$_SESSION['session_id'] = $post_id;
		
	}

}
?>