2012-07-14 51 views
0

我有一個頁面在http://www.example.com/abc/def/a/下,用戶可以購買產品。 對於營銷活動(打印紙),客戶應輸入一個較短的網址 http://www.example.com/order/如何確定從哪個url調用PHP頭文件

當這個網址被調用時,服務器將執行此腳本:

<?php 
header("Location: http://www.example.de/abc/def/a/"); 
exit; 
?> 

http://www.example.com/abc/def/a/下的頁面包含一些 信息(回扣代碼等),只能看到用戶 來自http://www.example.com/order/

$_SERVER['HTTP_REFERER']似乎是不可靠的,從我讀過的。

我檢查與phpinfo();如果有任何信息變量包含「訂單」,但我還沒有找到一個。

是否可以或者您推薦一種替代方法?

+2

我會使用PHP的會話跟蹤用戶移動。 – 2012-07-14 07:46:28

+0

只是忘記了會議...必須是我的年齡;)提示提示。剛剛實施 - 工作! – vbd 2012-07-14 08:08:02

回答

1

HTTP是純粹的形式無狀態協議,所以你不會在協議本身找到任何東西,將幫助你解決當前的問題。

使用$_SESSION來存儲數據之間的請求是最容易走的路線,我建議。

如上所述;因爲用於傳輸信息的協議是無狀態您別無選擇,只能爲您的Web應用程序創建一個方法來識別哪個請求由哪個用戶完成。這是php會話解決的完美問題。


1

正如你已經發現,HTTP引用,與其他所有頭一起,很容易被僞造。我所見到的唯一可靠的方法是記錄用戶在訪問訂單頁面時以及訪問/abc/def/a/頁面時驗證日誌條目是否存在。這種日誌可以存儲在$_SESSION中,但請確保在使用多臺服務器時,您有適當的設置以確保所有服務器共享相同的會話信息(您可以使用redis server to store session data)。

在訂單頁面:

session_start(); 
$_SESSION['order_visited'] = true; 

在退稅代碼頁:

session_start(); 
if(!isset($_SESSION['order_visited']) || !$_SESSION['order_visited']) { 
    header('Location: /order'); // Must visit order first 
    die(); 
}