其實解決辦法很簡單:
只需要在表單里生成一個token(隨機字符串),然后用個input裝起來,設置hidden。第一次post處理完數據后把token存入session,接下來每次post判斷一下token跟session中的一不一樣,一樣則說明數據處理過了。
下面是我用php寫的簡單demo,直接運行一下就可以了
1 <?php 2 session_start(); 3 4 //讀取服務器端的session_id,如果沒有的話賦值為-1 5 $session_id = empty($_SESSION['session_id']) ? -1 : $_SESSION['session_id']; 6 7 //讀取客戶端的post_id,如果沒有的話賦值為-2 8 $post_id = empty($_POST['post_id']) ? -2 : $_POST['post_id']; 9 10 //判斷兩個id是否相同,相同則說明已經處理過一次,不同則進行處理 11 if($session_id == $post_id){ 12 13 echo "<h1>已經處理過了,不管了</h1>"; 14 15 }else{ 16 17 //如果頁面還沒有提交過表單,則顯示表單,否則處理post過來的數據 18 if($post_id == -2){ 19 ?> 20 <html> 21 <body> 22 <form action="index.php" method="post"> 23 <input type="text" hidden="hidden" name="post_id" id="" value="<?php echo rand(1, 999999); ?>" /> 24 <input type="text" name="test" id="test" value="" /> 25 <input type="submit" value=""/> 26 </form> 27 </body> 28 </html> 29 <?php 30 }else{ 31 32 echo "<h1>正在處理</h1>"; 33 34 //處理過后吧post_id存入session,方便下次比較 35 $_SESSION['session_id'] = $post_id; 36 37 } 38 39 } 40 ?>