2012-03-22 6 views
6

रीडायरेक्ट पर अलर्ट बॉक्स प्राप्त न हो, मैं एक फॉर्म सबमिट करने के बाद मेरे पास 2 $ _POST चर हैं। लैंडिंग पृष्ठ में मैं उन्हें $ _SESSION चर में बदलना चाहता हूं और $ _POST वाले को अनसेट करना चाहता हूं ताकि उपयोगकर्ता को अपना डेटा दोबारा भेजने के लिए ब्राउज़र की अलर्ट प्राप्त न हो।

if(isset($_POST['clave']) && isset($_POST['email'])){ 
    $_SESSION['id_user']=$_POST['clave']; 
    $_SESSION['email']=$_POST['email']; 
} 
if(isset($_SESSION['id_user']) && isset($_SESSION['email'])){ 
    unset($_POST['clave']); 
    unset($_POST['email']); 
    //I do my stuff here 
} 

मैं गूंज पदों कुछ भी नहीं दिखाई देगा लेकिन हर मैं मैं ब्राउज़र फिर से चेतावनी मिल को फिर से लोड हैं: यह मेरा (काम नहीं कर रहा) कोड है।

+1

* सामान * क्या है जो आप करते हैं? –

उत्तर

8

आप सर्वर से $ _POST डेटा को हटा नहीं सकते हैं। ब्राउज़र इसे अलर्ट करता है क्योंकि यह ब्राउज़र द्वारा संग्रहीत है। यदि यह डेटा को पुनः सबमिट करता है तो यह उसे सर्वर पर वापस भेज देगा और $_POST को दोबारा दोहराएगा।

आपको POST-REDIRECT-GET पैटर्न का उपयोग करने की आवश्यकता है।

पोस्ट डेटा को संसाधित करें (उदा। सत्र में डंप करके), तो ब्राउज़र को पर रीडायरेक्ट करें और HTML दस्तावेज़ नहीं। ब्राउज़र तब सर्वर को एक GET अनुरोध करता है और आप उन्हें तब पृष्ठ देते हैं।

+0

धन्यवाद। अन्य सभी उत्तर सही थे लेकिन यह मुझे एक समाधान देता है जिसका उपयोग मैं अपनी समस्या को हल करने के लिए कर सकता हूं। चीयर्स! –

4

यह संभव नहीं है। जब उपयोगकर्ता पुनः लोड करता है, तो पिछला कार्य फिर से किया जाता है, जो एक पोस्ट था। भले ही आपने पहले सबमिट किए जाने पर POST मानों को अनसेट कर दिया हो, फिर भी रीलोड कार्रवाई पूरी तरह से नया अनुरोध होगा। ब्राउज़र हमेशा उपयोगकर्ता से पूछता है कि क्या वे डेटा पुनः सबमिट करना चाहते हैं।

इसे रोकने के लिए, आपको पोस्ट के गठन के बाद उपयोगकर्ता को किसी अन्य पृष्ठ पर रीडायरेक्ट करना होगा।

उदा।

  1. उपयोगकर्ता फॉर्म प्राप्त करता है।
  2. उपयोगकर्ता पदों रूप
  3. सर्वर एक नया पृष्ठ उपयोगकर्ता
  4. नया पृष्ठ हो जाता है
  5. उपयोगकर्ता हिट पर रीडायरेक्ट को फिर से लोड उपयोगकर्ता
  6. नया पृष्ठ फिर से हो जाता है - कोई पोस्ट किया जाता है।
2

यह काम नहीं करेगा क्योंकि ब्राउज़र आपको सर्वर-साइड के बारे में चेतावनी नहीं दे रहा है, यह पुष्टि करने के लिए कह रहा है कि इसे एक असुरक्षित कार्रवाई करनी चाहिए।

ज्यादातर मामलों में, आपको POST/Redirect/GET pattern का उपयोग करना चाहिए, जो इस समस्या से ग्रस्त नहीं है।

1

अपने एक पुराने पोस्ट है, लेकिन मैं भी एक ही समस्या है, तो यहाँ आसान समाधान का सामना करना पड़ा,

  1. एक login.php ==> जो एचटीएमएल फ़ॉर्म के माध्यम से दो चर पोस्ट बनाने

  2. getHome.php ==> बनाएं जो दो चर को $ _POST ['myvar'] से प्राप्त करेगा; फ़ंक्शन और सत्र में इन दो पोस्ट किए गए चर डाल दें, अगर आपको पसंद है तो गलत उपयोगकर्ता एन पास भी गूंजें।

  3. एक home.php ==> बनाएं, यहां आप सत्र की जांच के लिए if condition डाल देंगे यानी (जारी ($ _ सत्र ['myvar']) {{home home}} {header ('location: login। php '); * हेडर फ़ंक्शन आपको लॉगिन करने के लिए रीडायरेक्ट करेगा।php iif आप सीधे लॉग इन किए बिना home.php फ़ाइल को स्वीकार करते हैं।

यह किया गया !!