PHP刷新
回答
如果頁面刷新,然後你會期望以下互相爲相同的URL(路徑,文件名,查詢字符串),和相同形式的內容(如果有的話)(POST數據)兩個請求。這可能是相當多的數據,所以最好對它進行散列。所以......
<?php
session_start();
//The second parameter on print_r returns the result to a variable rather than displaying it
$RequestSignature = md5($_SERVER['REQUEST_URI'].$_SERVER['QUERY_STRING'].print_r($_POST, true));
if ($_SESSION['LastRequest'] == $RequestSignature)
{
echo 'This is a refresh.';
}
else
{
echo 'This is a new request.';
$_SESSION['LastRequest'] = $RequestSignature;
}
在你必須要小心的AJAX情況有關哪些文件你把這個代碼放入,以免更新這是異步調用腳本LastRequest簽名。
@naveen如果用戶在您的網站上打開了多個選項卡,在第一個選項卡上提交表單,在另一個選項卡上提交其他選項卡,關閉該選項卡,然後在第一個選項卡上刷新?上次請求可能並不總是有效。 – dqhendricks 2012-01-23 17:19:10
如果你的意思是你要當用戶第一次從當他們重新加載頁面檢查引用來的頁面之間進行區分。在PHP中它是:$ _SERVER [「HTTP_REFERER」]。看看它是否與您的腳本運行的頁面相同。可能是客戶端不提供此信息,如果發生這種情況,您可以設置cookie或會話變量來跟蹤上次請求的頁面。
<?php
session_start();
if (!isset($_SESSION["visits"]))
$_SESSION["visits"] = 0;
$_SESSION["visits"] = $_SESSION["visits"] + 1;
if ($_SESSION["visits"] > 1)
{
echo "You hit the refresh button!";
}
else
{
echo "This is my site";
}
// To clear out the visits session var:
// unset($_SESSION["visits"]);
?>
這當然不能保證他們點擊刷新按鈕。他們可能已通過(例如)您的網站的內部鏈接回到此頁面。 – Wickethewok 2009-01-19 17:37:56
反對。這隻會檢測到對該網站的多次訪問。每次重載或導航到具有此腳本的另一個URL時,都會增加計數器。這對檢測頁面重新加載沒有用處。 – six8 2012-08-28 05:42:03
如果有人刷新頁面,將發送與上一頁相同的請求。所以你應該檢查當前請求是否與最後一個請求相同。
session_start();
$pageRefreshed = false;
if (isset($_SESSION['LAST_REQUEST']) && $_SERVER['REQUEST_URI'] === $_SESSION['LAST_REQUEST']['REQUEST_URI']) {
if (isset($_SERVER['HTTP_REFERER'])) {
// check if the last request’s referrer is the same as the current
$pageRefreshed = $_SERVER['HTTP_REFERER'] === $_SESSION['LAST_REQUEST']['HTTP_REFERER'];
} else {
// check if the last request didn’t have a referrer either
$pageRefreshed = $_SERVER['HTTP_REFERER'] === null;
}
}
// set current request as "last request"
$_SERVER['LAST_REQUEST'] = array(
'REQUEST_URI' => $_SERVER['REQUEST_URI'],
'HTTP_REFERER' => isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : null
);
我沒有測試它,但它應該工作:這可以如下完成。
很好,謝謝! – 2014-01-16 22:21:37
爲了防止用戶點擊瀏覽器刷新或返回按鈕時出現重複表單處理,您需要使用頁面實例id會話變量以及包含該變量的隱藏表單輸入。當兩者不匹配時,則用戶已刷新頁面,並且不應該重新處理表單。對於進一步的細節,請參見:
當用戶點擊刷新按鈕時,瀏覽器包括其中出現$ _SERVER陣列中一個額外的標頭。
測試使用下面的刷新按鈕:
$refreshButtonPressed = isset($_SERVER['HTTP_CACHE_CONTROL']) &&
$_SERVER['HTTP_CACHE_CONTROL'] === 'max-age=0';
- 1. PHP窗體(刷新)到AJAX(不刷新)
- 2. php jquery div刷新
- 3. Php Javascript Div刷新
- 4. PHP GTK刷新GUI
- 5. 自動刷新PHP
- 6. 刷新刷新
- 7. 刷新頁面在php
- 8. 刷新時PHP $ _SESSION丟失
- 9. 自動刷新php頁面
- 10. 捲曲有時刷新PHP
- 11. PHP頭刷新警告
- 12. 刷新php代碼每秒
- 13. php鏈接刷新錯誤
- 14. 刷新圖像PHP和Javascript
- 15. 刷新頁面與Php
- 16. PHP會話重置刷新
- 17. Firebase php-jwt令牌刷新
- 18. PHP表單提交刷新
- 19. php javascript刷新頁面
- 20. PHP強制刷新圖像
- 21. PHP組合框AJAX刷新
- 22. ajax php sql沒有刷新
- 23. PHP重定向刷新
- 24. 用php或JS刷新Wbsite
- 25. jQuery的刷新PHP循環?
- 26. PHP刷新按鈕onclick
- 27. 部分PHP代碼刷新
- 28. AJAX Div使用PHP刷新
- 29. PHP/html:替代刷新
- 30. PHP - 自動刷新頁面
如果你想防止副作用(一般的POST請求),該請求可以被髮送多次,你應該說這在你的問題。因爲這將採用與迄今爲止使用的答案不同的方法。 – Gumbo 2009-01-19 15:34:46
贊同Gumbo。如果實際上你的目標是避免POST請求的副作用,那麼你應該使用GET重定向到一個新頁面。 – Wickethewok 2009-01-19 17:40:10