解決 php提交表單到當前頁面,重新整理會重複提交 的問題
阿新 • • 發佈:2019-02-17
下午有一個朋友問我這個問題,其實解決辦法很簡單:
只需要在表單裡生成一個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; } } ?>