शीर्ष लेख के साथ पिछले पृष्ठ पर ("स्थान:"); PHP में


124

इस तरह के सवाल का शीर्षक मेरा सवाल बताता है। मैं PHP पृष्ठ आगंतुक को अपने पिछले पृष्ठ पर कैसे पुनः निर्देशित करूँheader( "Location: URL of previous page" );


हेडर ('स्थान:' '$ _SERVER [' HTTP_REFERER ']);
रस्कुल

इस स्रोत के अनुसार w3schools.com/php/php_superglobals_server.asp , यह विश्वसनीय नहीं है क्योंकि सभी विक्रेता इसका समर्थन नहीं करते हैं
mohadennis

जवाबों:


246

प्रयत्न:

header('Location: ' . $_SERVER['HTTP_REFERER']);

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

आदर्श रूप से, आप या तो करना चाहेंगे:

  • क्वेरी चर के रूप में अनुरोध पर वापसी का पता लगाएं (उदाहरण के लिए; पीछे = / सूची)
  • अपने कोड में एक रिटर्न पेज को परिभाषित करें (यानी सभी सफल फॉर्म सबमिशन लिस्टिंग पेज पर रीडायरेक्ट करें)
  • उपयोगकर्ता को यह विकल्प प्रदान करें कि वे कहाँ जाना चाहते हैं (उदाहरण के लिए सहेजें और संपादन जारी रखें या बस सहेजें)

19
अजीब बातें हुई हैं :)
दिमित्री

3
@ क्या आप इसके साथ एक व्यावहारिक समस्या साबित कर सकते हैं?
पेका

1
एक निर्धारित पृष्ठ-टू-पेज संदर्भ में पूर्व निर्धारित परीक्षण और मान्य होने के बाद, संदर्भकर्ता का उपयोग करना, एक पूरी तरह से स्वीकार्य अभ्यास हो सकता है - विशाल बहुमत ब्राउज़र उचित HTTP_REFERER भेजता है।
पेक्का

1
@ कोल मैंने इसे उत्पादन में उपयोग किया है जब मुझे डेमो के लिए कुछ करना पड़ा। जैसा कि आप मेरे उत्तर से देख सकते हैं, मैं HTTP_REFERER पर आधारित पुनर्निर्देशन के बदले तीन अन्य समाधान प्रदान करता हूँ।
दिमित्री

2
@Madmartigan कि वास्तव में अजीब व्यवहार की तरह लगता है, केवल संकेत मैं 'नेट पर देख सकता हूं क्योंकि यह कुछ पुनर्निर्देशन समस्याएं हैं। वैसे भी, मैं मानता हूँ कि यदि आप को 100% सुरक्षा की आवश्यकता हो तो रेफ़र का उपयोग करना तरीका नहीं है
Pekka

22

इसका इतना आसान बस यह उपयोग करें

header("location:javascript://history.go(-1)");

मेरे लिए यह ठीक है


2
यह वास्तव में चतुर लग रहा था, लेकिन FF10 में मुझे मिलता है "Corrupted Content Error The page you are trying to view cannot be shown because an error in the data transmission was detected."तो यह मूल रूप से अनुपयोगी है।
वेस्ले मर्क

वेस्ले मर्च, इसके लगभग हर प्रमुख ब्राउज़र में मेरे लिए काम करना ठीक है। यह केवल आपके लिए ही काम करता है जब आप इतिहास में कुछ करने वाले पृष्ठ पर आते हैं।
हम्माद

5
यह पिछले पृष्ठ को ब्राउज़र कैश से परोसा जा सकता है।
अकु

14

आपको किसी तरह उस स्थान को बचाना होगा।

कहें कि यह एक POST फ़ॉर्म है, बस वर्तमान स्थान को किसी छिपे हुए फ़ील्ड में रखें और फिर उसका उपयोग header()स्थान में करें।


14

बस थोड़ा सा जोड़: मेरा मानना ​​है exit;कि हेडर फंक्शन के बाद जोड़ने के लिए यह एक सामान्य और ज्ञात बात है कि हम बाकी कोड लोड या निष्पादित नहीं करना चाहते हैं ...

header('Location: ' . $_SERVER['HTTP_REFERER']);
exit;

यह मेरे लिए सिर्फ "" है।
अलेक्जेंडर गुओ

2

इसे जावास्क्रिप्ट में आज़माएँ:

 $previous = "javascript:history.go(-1)";

या आप इसे PHP में आज़मा सकते हैं:

if(isset($_SERVER['HTTP_REFERER'])) {
    $previous = $_SERVER['HTTP_REFERER'];
}

1

किसी सत्र चर में पिछले url को संग्रहीत करना खराब है, क्योंकि उपयोगकर्ता कई पृष्ठों पर राइट क्लिक कर सकता है और फिर वापस आकर सहेज सकता है।

जब तक आप सत्र चर में पिछले url को प्रपत्र में छिपे हुए फ़ील्ड में नहीं सहेजते हैं और शीर्ष लेख को सहेजने के बाद ("स्थान: कॉलिंग पृष्ठ का URL सहेजें");


हम केवल $ _SERVER ['http_referrer'] का उपयोग क्यों नहीं कर सकते?
विग्नेश
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.