2009-08-12 17 views
13

क्या वेब ब्राउज़र को पूरी तरह से पर निर्देशित करने का कोई तरीका है PHP के साथ एक कुकी सेट सेट?ब्राउज़र से कुकी हटाएं?

मैं समाप्ति यह नहीं करना चाहते या ब्राउज़र के लिए प्रतीक्षा बंद कर दिया किया जाना है।

डिलीट के साथ मेरा मतलब है कि वास्तव में यह कुकी की सूची के अंदर सूचीबद्ध नहीं है।

+0

आप ब्राउज़र को अपने मूल्य को खाली स्ट्रिंग पर सेट करके कुकी को हटाने के लिए "विनम्रता से पूछ सकते हैं" या अतीत में कुछ तारीख को समाप्ति समय निर्धारित कर सकते हैं, या '$ कुकी-> हटाएं(); https से : //github.com/delight-im/PHP- कुकी – caw

उत्तर

9

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

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

कुकी को हटाने के लिए, इसलिए, अपने समाप्ति समय को अतीत में सेट करें। PHP में, यह setcookie() के साथ किया जाता है।

+0

यह उत्तर का सबसे नज़दीक था (अनुच्छेद # 1 जो है)। धन्यवाद। –

5

हां। setcookie() का उपयोग करें और उस कुकी के लिए समाप्ति तिथि सेट करें जिसे आप अतीत में किसी समय में हटाना चाहते हैं। उपयोगकर्ता के ब्राउज़र को परिणामस्वरूप इसे स्वचालित रूप से हटा देना चाहिए।

-1

मैंने इस प्लगइन को मेरे लिए लिखा और सही तरीके से काम करता है।

(function($) { 
    $.cookieAllDelete = function(doc) 
    { 
     var cookie_date = new Date(); 
     var cookies = null; 

     cookies = doc.cookie.split(';'); 
     cookie_date.setTime(cookie_date.getTime() - 1); 

     for(var i=0; i < cookies.length; i++) 
     { 
      var cookie_name = cookies[i].split('=')[0]; 
      try { 
       if (cookie_name.length > 0) 
        doc.cookie = cookie_name += "=; expires=" + cookie_date.toGMTString(); 
      } catch(ex) {} 
     } 
    } 
})(jQuery); 

jQuery.cookieAllDelete(document); 
+3

अगर जावास्क्रिप्ट बंद हो गया है तो यह कितना अच्छा काम करता है? :-) – ceejayoz

+0

क्षमा करें, मैं टैग jQuery भी देख रहा था और मैं उलझन में हूँ। –

+1

नीचे के लिए धन्यवाद मेरे पास से नहीं था। – ceejayoz

19

सभी कुकी हटाने के लिए कुछ इस तरह का प्रयास करें:

foreach ($_COOKIE as $name => $value) { 
    setcookie($name, '', 1); 
} 

मूल्य 1समय सीमा समाप्त हो मूल्य है और यह प्रतिनिधित्व करता एक सेकंड के बाद यूनिक्स समय युग के शुरू करते हैं। तो यह हमेशा से ही समाप्त हो चुका है।

+0

किसी ने भी उन सभी उत्तरों को छोड़ दिया और उन्हें छोड़ दिया जो कि समाप्ति के साथ करना था, क्योंकि सवाल ने कहा कि वे इसे समाप्त नहीं करना चाहते हैं। –

+17

@ चाचा 102: ठीक है, तो कोई अब कुकीज़ कैसे काम नहीं करता है। – Gumbo

+0

@ गंबो या आप किसी के लिए नकली करने के लिए 'deleteAllCookies' नामक फ़ंक्शन में अपने उत्तर को सुधार और लपेट सकते हैं। : पी – choz

1

मुझे लगता है कि आप संयुक्त दृष्टिकोण का उपयोग करने के लिए है कि के रूप ने सुझाव दिया है (जैसा कि Chacha102 ने सुझाव दिया)

  • सेट समाप्ति अतीत में जिस तरह से वापस JavaScriptto document.cookie डोम वस्तु से प्रविष्टियां (हटाना
  • उपयोग एन्ड्रेस descalzo)

वहाँ मिश्रित दृष्टिकोण के साथ जाने के लिए 2 अच्छा कारण हैं:

  • ब्राउज़र में जावास्क्रिप्ट को अक्षम किया जा सकता है
  • दस्तावेज़ कुकी में सभी कुकीज़ दिखाई नहीं दे रही हैं कुछ आधुनिक ब्राउज़र कुकीज़ के लिए httponly ध्वज का समर्थन कर रहे हैं। पीएचपी केवल Http कुकीज़ के लिए समर्थन हासिल है, को देखने के http://www.php.net/setcookie
3

'ऐसा लगता है कि कुकी को हटाने से यह अधिक कठिन होता है।

setcookie($name, '', 1); 

चाल नहीं करेगा। '' खाली है और setcookie पूरे निर्देश को अनदेखा कर सकता है।

इसके अलावा पिछले करने के लिए समय की स्थापना कभी कभी कुकी मान जिसकी समय सीमा समाप्त समय नए से 1.

है मैं इस अधिकार के साथ अब काम कर रहा हूँ बनाए रखने के लिए अनुमति देता है। मुझे नहीं पता कि यह कहां से आता है, लेकिन यह वहां है।

मैं

setcookie($name, '0', 9000000000); 

का सहारा लिया गया है यह सुनिश्चित करता है कि कुकी गलत पर निराकरण मान पर सेट है और यह किसी भी पिछले मूल्य से अधिक नया है कि है।

अगर किसी के पास इस व्यवहार में कोई अंतर्दृष्टि है तो कृपया बताएं।

मुझे संदेह है कि कठिनाई इस तथ्य में निहित है कि setcookie के लिए डोमेन और पथ मान निष्पादन से निष्पादन के समान होने की गारंटी है जब मान निर्दिष्ट नहीं हैं।

और मुझे पता है कि ऐसी कुकी 2038 तक समाप्त नहीं होगी।

वैकल्पिक रूप से, यदि कुकी की नवीनतम समाप्ति तिथि ज्ञात है, तो इसे केवल 1 सेकंड के बाद सेट करने की आवश्यकता है।

+0

मेरे मामले में, सेटक्यूकी क्यों काम नहीं कर रहा है क्योंकि मैंने चौथे पैरामीटर के लिए उसी स्थान का उपयोग नहीं किया है। इसलिए सुनिश्चित करें कि कुकी सफलतापूर्वक – Antony

+1

को हटाने के लिए आप 4 वें पैरामीटर के लिए एक ही स्थान का उपयोग करते हैं, मैंने पाया कि आपको कुकी को सेट करने और हटाने के लिए समान पैरामीटर सेट करना होगा। कुकी सेट करें: सेटकुकी ($ नाम, $ uid ', $ time,'/',' ', 0); - कुकी हटाएं: सेटकुकी ($ नाम, $ uid ', 1,'/',' .domain.name ', 0); काम नहीं करेगा, 5 वां पैरामीटर दोनों के लिए समान होना चाहिए। – Grant

+0

$ _COOKIE सरणी प्रिंट करें, अन्तर्निहित कुंजी अनसेट करें: अनसेट ($ _ कुकी [$ नाम]); – ShivarajRH

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