2009-12-08 90 views

回答

113

商店,要麼在Cookie(如果這是您的情況可以接受的),或在一個會話變量。

session_start(); 

if (!isset($_SESSION["origURL"])) 
    $_SESSION["origURL"] = $_SERVER["HTTP_REFERER"]; 
+12

請在以下答案注意@pcp的意見! – 2012-11-09 20:59:14

+4

請注意,您還應該檢查'http_referer'是否存在,因爲它通常不會,這可能會導致「未定義的索引」錯誤。 – Justin 2014-06-26 19:25:48

4

儲存於一個Cookie,只持續了當前瀏覽會話

15

正如喬納森建議,你要麼想將其保存在cookie或會話。

更簡單的方法是使用一個會話變量。

session_start(); 
if(!isset($_SESSION['org_referer'])) 
{ 
    $_SESSION['org_referer'] = $_SERVER['HTTP_REFERER']; 
} 

把它放在頁面的頂部,你將永遠可以訪問網站訪問者的第一個引用者。

80

而且不要忘了逃跑,因爲它的網絡應用程序的一個常見的攻擊向量$_SERVER["HTTP_REFERER"]

+40

你可以給我們一個樣本,併發布多一點在您的文章。 – TheBlackBenzKid 2012-09-04 15:42:29

+2

但是,這是一個不可信任的服務器,因爲在某些瀏覽器和某些條件下,這個變量根本沒有設置。 – 2013-01-16 07:39:55

+0

@TheBlackBenzKid - 這是一個關於在PHP中轉義變量的快速StackOverflow答案。有很多方法可以完成: http://stackoverflow.com/questions/13199095/escaping-variables – 2016-01-26 02:01:48

1

使用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']。