2009-12-08 14 views
93

मैं रेफरर यूआरएल प्राप्त करने के लिए $_SERVER['HTTP_REFERER']; का उपयोग कर रहा हूं। यह तब तक काम करता है जब तक उपयोगकर्ता दूसरे पृष्ठ पर क्लिक नहीं करता है और रेफरर अंतिम पृष्ठ में बदल जाता है।PHP के साथ मूल यूआरएल रेफरर प्राप्त करें?

मैं मूल संदर्भ यूआरएल कैसे संग्रहीत करूं?

उत्तर

113

इसे या तो कुकी में स्टोर करें (यदि यह आपकी स्थिति के लिए स्वीकार्य है), या सत्र चर में।

session_start(); 

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

कृपया नीचे दिए गए उत्तर में @pcp की सलाह नोट करें! –

+4

ध्यान दें कि आपको यह भी जांचना चाहिए कि 'http_referer' मौजूद है, क्योंकि यह अक्सर नहीं होता है, जो" अपरिभाषित अनुक्रमणिका "त्रुटि का कारण बन सकता है। – Justin

4

स्टोर यह एक कुकी में है कि केवल वर्तमान ब्राउज़िंग सत्र

15

रूप Johnathan सुझाए के लिए रहता है, आप या तो एक कुकी या एक सत्र में इसे सहेजना चाहते हैं।

एक सत्र चर का उपयोग करना आसान तरीका होगा।

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

पेज के शीर्ष पर रखें, और आप हमेशा पहले रेफरर तक पहुंचने में सक्षम होंगे कि साइट विज़िटर द्वारा निर्देशित किया गया था।

80

और वेब ऐप्स के लिए एक आम हमले वेक्टर के बाद से $_SERVER["HTTP_REFERER"] से बचने के लिए मत भूलना।

+40

क्या आप हमें एक नमूना दे सकते हैं और अपनी पोस्ट में थोड़ा और पोस्ट कर सकते हैं। – TheBlackBenzKid

+2

हालांकि, यह कुछ गैर-भरोसेमंद सर्वर व्यवहार्य है क्योंकि कुछ ब्राउज़रों में और कुछ स्थितियों में, यह चर बिल्कुल सेट नहीं है। –

+0

@TheBlackBenzKid - यहां PHP में वेरिएबल चर से बचने के लिए एक त्वरित StackOverflow उत्तर है। इसे कई तरीकों से किया जा सकता है: http://stackoverflow.com/questions/13199095/escaping-variables –

1

कुकी का उपयोग संदर्भ पृष्ठ के भंडार के रूप में करना अधिकांश मामलों में बहुत बेहतर है, क्योंकि कुकीज़ बंद होने तक कुकीज़ को संदर्भित रखेगी (और ब्राउज़र टैब बंद होने पर भी इसे बनाए रखेगा), इसलिए यदि उपयोगकर्ता पृष्ठ छोड़ देता है खुला है, सप्ताहांत से पहले कहें, और कुछ दिनों के बाद इसमें लौट आए, आपका सत्र शायद समाप्त हो जाएगा, लेकिन कुकीज़ अभी भी वहां होगी।

एक पेज के शुरू में है कि कोड रखो (किसी भी html उत्पादन से पहले, के रूप में कुकीज़ ठीक से केवल किसी भी गूंज/प्रिंट से पहले स्थापित किया जाएगा):

if(!isset($_COOKIE['origin_ref'])) 
{ 
    setcookie('origin_ref', $_SERVER['HTTP_REFERER']); 
} 

तो आप इसे बाद में उपयोग कर सकते हैं:

$var = $_COOKIE['origin_ref']; 

और कुकी के उपयोग करते समय $ _SERVER ['HTTP_REFERER'] से बचने के बारे में @pcp के सुझाव के अलावा, आप प्रत्येक अनुरोध पर $ _COOKIE ['origin_ref'] से बचने के लिए भी इच्छुक हो सकते हैं।

संबंधित मुद्दे