2009-12-11 23 views
1

通常,一個網站有鏈接到定點主頁,網頁A,網頁B,等的不同頁面的菜單欄..PHP,會話狀態,重定向「家」的基礎上引薦鏈接

比方說,你有一個地址爲http://www.example.com。當有人在瀏覽器中輸入該網址時,99%被引導至由「主頁」代表的頁面。它通常具有index [.html | .php]的可選擴展名(例如,http://www.example.com/index.html)。但是,有些用戶會根據用戶打算訪問網站的位置,將用戶重定向到其他網頁。例如,如果您的網站上有廣告宣傳您的網頁,則可能需要將它們重定向到:http://www.example.com/camefromad.html這與您的普通「首頁」頁面看起來差不多,但可能會添加一些文字,他們來自廣告所在的頁面。

我的問題是:

有沒有一種方式,用戶登陸後,在網站上從一個被稱爲頁面,使用PHP,確保點擊「首頁」鏈接會經常去http://www.example.com/camefromad.htmlIF用戶登陸那裏開始?我試圖避免的是用戶來到http://www.example.com/camefromad.html然後單擊菜單欄中的「主頁」,並結束於默認主頁,永遠不會返回到http://www.example.com/camefromad.html頁面(我不在公共菜單中沒有啓用着陸頁,因爲我不希望普通用戶能夠去那裏)。

這是使用PHP,我試圖使用會話狀態等拼湊在一起,但我還沒有完全完成拼圖可是我的第一次。以下是我在的index.php(這是代表「主頁」鏈接文件:

<? 
session_start(); 
$_SESSION['amSet']= 0; 
?> 

<? 
if ($_SESSION['amSet'] == 0) { 
    if (!empty($_SERVER['HTTP_REFERER'])) { 
    $referrer = $_SERVER['HTTP_REFERER']; 
    $_SESSION['amSet'] = 1; 
    } 
} 
if (preg_match("/other.example.net/",$referrer)) { 
    header('Location: http://example.com/camefromad.html'); 
} 
?> 

基本上,我的想法是設置一個變量,當用戶來到網站,這樣的引用變量被設置爲引用網站,但如果用戶點擊網站本身的鏈接,我不希望引薦人重置,我希望它保持當用戶第一次訪問網站時的情況,所以如果在「主頁」鏈接用戶點擊它會在用戶總是指適當的頁面很顯然,我上面的代碼不工作

+0

一般情況下,被引薦你的做法是正確的,但你應該牢記,這可能由於某些用戶可能禁用發送引薦者(或發送假冒引導者),因此每次都不工作。 – 2009-12-11 16:46:49

回答

1

爲什麼你不將referer存儲在會話變量中? 在您的着陸頁,你可以有這樣的:

<?php 
session_start(); 
if(empty($_SESSION['comeFrom']) && !empty($_SERVER['HTTP_REFERER'])){ 
    $_SESSION['comeFrom'] = $_SERVER['HTTP_REFERER']; 
} 
?> 

然後,在你的主頁:

<?php 
session_start(); 
if(!empty($_SESSION['comeFrom']) && 
    preg_match("/referrerSite.com/",$_SESSION['comeFrom'])){ 
    header('Location: http://www.example.com/camefromad.html'); 
} 
?> 
+0

優秀Arkh。謝謝!在解決了我在上面的評論中提到的空白問題後,我應用了這個代碼,這個代碼看起來比我最初的路線要乾淨得多,而且事情似乎很好。 – 2009-12-11 16:51:51

2

就快 - !只是保存$引用在$ _SESSION變量,然後你可以檢查$ _SESSION ['referrer']是否在後續頁面請求中設置並相應採取行動。

+0

謝謝珍妮克。我剛剛意識到我最初的問題是什麼。我得到這個「無法修改標題信息」錯誤。這是因爲我在第一個?和第二個?之間有空格?在我的代碼中。 – 2009-12-11 16:51:14