我使用$_SERVER['HTTP_REFERER'];
來獲取引用者Url。它按預期工作,直到用戶單擊另一個頁面並且引用者更改爲最後一頁。用PHP獲取原始URL referer?
如何存儲原始引用URL?
我使用$_SERVER['HTTP_REFERER'];
來獲取引用者Url。它按預期工作,直到用戶單擊另一個頁面並且引用者更改爲最後一頁。用PHP獲取原始URL referer?
如何存儲原始引用URL?
商店,要麼在Cookie(如果這是您的情況可以接受的),或在一個會話變量。
session_start();
if (!isset($_SESSION["origURL"]))
$_SESSION["origURL"] = $_SERVER["HTTP_REFERER"];
儲存於一個Cookie,只持續了當前瀏覽會話
正如喬納森建議,你要麼想將其保存在cookie或會話。
更簡單的方法是使用一個會話變量。
session_start();
if(!isset($_SESSION['org_referer']))
{
$_SESSION['org_referer'] = $_SERVER['HTTP_REFERER'];
}
把它放在頁面的頂部,你將永遠可以訪問網站訪問者的第一個引用者。
而且不要忘了逃跑,因爲它的網絡應用程序的一個常見的攻擊向量$_SERVER["HTTP_REFERER"]
。
你可以給我們一個樣本,併發布多一點在您的文章。 – TheBlackBenzKid 2012-09-04 15:42:29
但是,這是一個不可信任的服務器,因爲在某些瀏覽器和某些條件下,這個變量根本沒有設置。 – 2013-01-16 07:39:55
@TheBlackBenzKid - 這是一個關於在PHP中轉義變量的快速StackOverflow答案。有很多方法可以完成: http://stackoverflow.com/questions/13199095/escaping-variables – 2016-01-26 02:01:48
使用Cookie作爲參考頁面的存儲庫是在大多數情況下要好得多,因爲Cookie會引薦,直到關閉瀏覽器(將保持即使瀏覽器關閉標籤)的情況下,因此,如果用戶離開網頁開放,讓我們說週末前,並在幾天後返回它,你的會議可能會過期,但餅乾仍然會在那裏。
把這些代碼在開始頁面(任何HTML輸出之前,餅乾只會之前的任何迴音/打印正確設置):
if(!isset($_COOKIE['origin_ref']))
{
setcookie('origin_ref', $_SERVER['HTTP_REFERER']);
}
然後你就可以在以後訪問它:
$var = $_COOKIE['origin_ref'];
除了@pcp關於轉義$ _SERVER ['HTTP_REFERER'的建議,當使用cookie時,您可能還想要在每個請求中轉義$ _COOKIE ['origin_ref']。
請在以下答案注意@pcp的意見! – 2012-11-09 20:59:14
請注意,您還應該檢查'http_referer'是否存在,因爲它通常不會,這可能會導致「未定義的索引」錯誤。 – Justin 2014-06-26 19:25:48