2013-04-29 61 views
4

我重定向到與查詢字符串不同的頁面,說刪除網頁上的查詢字符串值刷新

header('location:abc.php?var=1'); 

我能夠通過使用下面的代碼查詢字符串值的幫助重定向的頁面上顯示一條消息,說

if (isset ($_GET['var'])) 
{ 

    if ($_GET['var']==1) 
    { 
     echo 'Done'; 
    } 
} 

但我的問題是,即使刷新頁面上的消息不斷顯示。因此,我希望消息在頁面刷新時被刪除,即刷新時URL中不應該存在值或查詢字符串。

在此先感謝。

回答

5

你不能「在刷新時刪除查詢參數」。 「刷新」意味着瀏覽器再次請求相同的URL,因此沒有特定的事件會在刷新時觸發,以便讓您將其與常規頁面請求區分開來。

因此,擺脫查詢參數的唯一選項是在顯示消息後重定向到其他URL。說,使用Javascript你10秒左右後重定向到一個不同的頁面。這顯然改變了用戶體驗,但並沒有真正解決問題。

選項二是將消息保存在服務器端會話中並顯示一次。例如,像:

if (isset($_SESSION['message'])) { 
    echo $_SESSION['message']; 
    unset($_SESSION['message']); 
} 

可以造成混亂與平行雖然要求,但大多是可以忽略不計。

選項三將是兩者的組合:您使用某個唯一標記在會話中保存消息,然後在URL中傳遞該標記,然後顯示消息一次。例如:

if (isset($_GET['message'], $_SESSION['messages'][$_GET['message']])) { 
    echo $_SESSION['messages'][$_GET['message']]; 
    unset($_SESSION['messages'][$_GET['message']]); 
} 
4

更好地使用會話代替

值分配給一個會話VAR

$_SESSION['whatever'] = 1; 

在接下來的頁面,使用它,後來取消它

if(isset($_SESSION['whatever']) && $_SESSION['whatever'] == 1) { 
    //Do whatever you want to do here 

    unset($_SESSION['whatever']); //And at the end you can unset the var 
} 

這將是一個更安全的替代方案,因爲它可以幫助您消除獲取價值,同時價值也會從用戶隱藏起來

0

試試這個方法[使用會話]

<?php 
//abc.php 
session_start(); 
if (isset ($_GET['var'])) 
{ 
if ($_GET['var']==1) 
{ 
if(isset($_SESSION['views'])) 
{ 
//$_SESSION['views']=1; 
} 
else 
{ 
    echo 'Done'; 
    $_SESSION['views']=1; 
} 
} 

} 
?> 
2

當消息提示請求一個不存在的會話。如果爲false,則顯示該消息,如果爲true,則不執行任何操作。在session_start();只需要,如果之前沒有一個startet。

session_start(); 
if ($_GET['var']==1 && !isset($_SESSION['message_shown'])) 
{ 
    $_SESSION['message_shown'] = 1; 
    echo 'Done'; 
} 
1

有一個優雅的JavaScript解決方案。如果瀏覽器支持history.replaceState(http://caniuse.com/#feat=history),你可以簡單地調用window.history.replaceState(對象標題URL)和替換瀏覽器歷史記錄用乾淨的URL當前條目。查詢字符串將不再用於刷新或後退/前一個按鈕。