2013-07-17 43 views
4

我的網站的網頁通過使用GET從預定義的URL中檢索變量來顯示網頁。 例如,第一頁上的代碼:index.php如何阻止用戶爲URL添加書籤?

<p><a href="/blank.php?name1=value1&amp;name2=value2">next page</a></p> 

第二頁:blank.php?name1=value1&amp;name2=value2

$name1 = $_GET['name1'] ; 
$name2 = $_GET['name2'] ; 
echo $name1 ; 
echo $name2 ; 

這樣的網頁被當場創建並顯示有點像一個CMS和IUSE該方法用於我網站上的所有網頁,但是如果用戶爲選項卡書籤,他們將具有該網頁的過時信息,因爲該網頁內容包含在URL中。

編輯:如果我要使用post他們將這種信息傳達到新網頁更好嗎?而不是:

<form method="post" action="blank.php"> 
    <input type="hidden" name="name1" value="value1"> 
    <input type="submit"> 
</form> 
+2

您應該使用POST而不是GET。 – 2013-07-17 18:31:40

+0

那麼,你是否說使用參數書籤URL不起作用?它看起來應該。 –

+0

您可以創建一段隨機鏈接,在一段時間後打破。 –

回答

3

快速和骯髒的解決方案:一個時間戳參數添加到您的網址,如:

<p><a href="/blank.php?name1=value1&amp;name2=value2&amp;time=<?php echo time(); ?>">next page</a></p> 

然後,在頁面上,檢查時間戳是舊的,然後在一定期限:

if(!isset($_GET['time']) || time() - intval($_GET['time']) > 60*60) { 
    header('Location: index.php'); 
} 

$name1 = $_GET['name1'] ; 
$name2 = $_GET['name2'] ; 
echo htmlspecialchars($name1); 
echo htmlspecialchars($name2); 

所以如果一個鏈接超過一個小時(60秒60分鐘),它會被重定向到主頁!

但是這種方法不是很方便用戶使用!你最好試着建立你的鏈接,以便在訪問時永遠不會得到舊內容!

0

您可以防止用戶使用書籤快捷鍵,但我不認爲這是無論如何要阻止書籤其用戶在他們的瀏覽器(或寫下來的URL物)。

您可能想要考慮在每個頁面加載頁面上生成數據,因此如果用戶爲URL添加書籤,他們會看到最新的信息。或者,如果用戶沒有按照某條路徑到達該路徑,則會顯示一條消息,告訴他們數據已過期。

0

使用POST而不是GET會解決這個問題的大部分,但我知道這可能是不可能的,這取決於您已經創建的代碼量。另一個可能的解決方案是設置會話變量以確定該人是否應該訪問此頁面。如果他們無法訪問,則會將其發回到其着陸頁,個人資料或登錄頁面。我通過放置只能在一個頁面上設置的會話變量來完成此操作,然後在查看頁面後將其銷燬,這樣他們不能簡單地返回頁面,因爲會話值已消失。

不幸的是,不可能阻止人們爲您的頁面創建書籤,您只需要篩選誰可以看到(編輯或訪問)它。

0

你基本上只談論用戶會話,在這期間所有的變量都是有意義的。即使使用POST也不能解決問題。在極端情況下,可以發出POST請求(或者搜索引擎可以這樣做)並曲解檢索結果。我建議像其他許多網站一樣在後端附加一個sessionid來控制有效的時間範圍。這樣你可以更好地控制你的網站功能和用戶體驗。會話是否已過期應取決於您的業務邏輯,而不是GET/POST方法。