2011-12-29 137 views

回答

6

您可以將Location標題發送到正在處理表單輸入的腳本中的其他URL。這個新的URL將可用於瀏覽器而無需發送表單數據。

+0

我用這個。非常感謝。在處理完想要發生的事情之後,我剛剛重定向了同一頁面。 – Darren 2011-12-29 21:39:27

1

我不認爲有這樣做的好方法。我們過去完成這項工作的方式是在日期和日期之間設置一個最短時間last_modified。如果你還沒有等一個小時就說,這個帖子會被拒絕。

4

停止一個你無法控制的客戶端(瀏覽器)從做一些事情是不可能的。然而,有可能 - 對你來說很容易 - 硬化您的應用程序在此:

  • 當你表現形式,創建一個隨機令牌,將其存儲在會話中,並將其添加到窗體作爲隱藏現場
  • 當您收到填好的表格,檢查令牌對會話,如果它不匹配忽略的數據,如果它不匹配清除會話令牌和處理數據

任何標題或其他技巧可能會或可能不適用於瀏覽器和人們刷新沒有MALICE,但他們definitly不會幫助攻擊者。

1

我知道的唯一訣竅就是讓表單提交返回一個帶有鏈接的頁面,您可以通過javascript(元刷新,無論什麼)單擊鏈接到第三頁。

這個想法是當你打F5時最終刷新的東西是鏈接頁面而不是表單提交頁面。

5

使用郵政/重定向/獲取:http://en.wikipedia.org/wiki/Post/Redirect/Get

在PHP程序

以代碼的形式,那麼不輸出任何東西把這個header('Location: http://www.example.com/foo.php');(顯然替換URL),做另一個頁面上的顯示。如果你需要傳遞任何東西到該頁面,然後使用查詢字符串和$_GET[]

1

在我尋求解決這個問題,我一直採取一些不同的方法。在自行開發的MVC環境中,我重定向了兩次頁面。確保數據被提交到數據庫後,我把它重定向到

header("Location: http:// .... /redirect/blogcomment 

這會打電話給我的「重定向」類和「blogcomment」的方法。在這裏,它會再次被重定向到「引用者」。

public function blogcomment() { 
    $ref = $_SERVER['HTTP_REFERER']; 
    $page = "Location: " . $ref . "#commentform"; 
    header($page); 

} 

這將清除POST陣列和通過只是在表單字段的前面添加一個錨定標記,我跳轉回該位置。當然,我也可以自定義我的重定向。到目前爲止,它的功能就像一個魅力

-1

雙重負載...即將頁面重定向回自己是不好的做法。嘗試調試一個這樣做的應用程序,這使得更難以意識到正在發生。對於上帝之人的愛,如果你需要php提交一個表單,先將它發送給一個單獨的腳本,然後返回,如果你想再次刪除發送表單的刷新,則更容易調試!

-1

嘗試做:

unset($_POST); 

爲最後一個命令。