2012-05-10 22 views
15

मुझे यह पता लगाने की आवश्यकता है कि इस कुकी को कैसे सेट करें। मैंने जो भी कोशिश की है वह अब तक विफल रही है।PHP में कुकी को अनसेट कैसे करें?

इस प्रकार मैं वर्तमान में इसे परेशान कर रहा हूं और ऐसा लगता है कि यह काम नहीं कर रहा है।

setcookie("user_id", $user_id, time() - 7200); 

यह मैं इसे कैसे सेट किया गया है:

setcookie("user_id", $user_id, time() + 7200); 

मैं इस समारोह set_session_from_cookie() कहा जाता है, तो एक कुकी सेट है की जाँच करता है कि है, और अगर यह सेट है, यह एक नया सत्र कुकी का उपयोग शुरू होता है।

समस्या यह है कि जब मैं अपने पृष्ठ पर इसका उपयोग करता हूं तो मैं लॉगआउट करने में असमर्थ हूं। मुझे लगता है कि ऐसा इसलिए है क्योंकि मैं सत्र को अनसेट करने में असमर्थ हूं।

कारण यह है कि मेरे पास यह कार्य है यदि उपयोगकर्ता सत्र समाप्त करने के बाद याद रखना चाहता है, तो वे कुकी को कॉल करके सत्र को पुनरारंभ कर सकते हैं।

function set_session_from_cookie() 
{ 
    if (isset($_SESSION['user_id'])) { 
     echo ''; 
    } else { 
     $_SESSION['user_id']=$_COOKIE['user_id']; 
    } 
} 

लॉगआउट:

<?php 
require'core.php'; 
session_destroy(); 

setcookie("user_id", "", time() - 7200); 
header('Location:/social_learning/site_pages/starter-template.php'); 

मैं निम्नलिखित कोड के साथ मेरी कुकी सेट:

if ($rememberme == "on") { 
    $user_id = mysql_result($query_run, 0, 'id'); 
    setcookie("user_id", $user_id, time() + 7200); 
    $_SESSION['user_id'] = $user_id; 
    redirect('home_page.php'); 
} else { 
    if ($rememberme == "") { 
     echo 'ok'; 
     $user_id = mysql_result($query_run, 0, 'id'); 
     echo $user_id; 
     $_SESSION['user_id'] = $user_id; 
     redirect('home_page.php'); 
    } 
} 

मैं समारोह मैं बनाया का उपयोग किए बिना बचाया कुकी का उपयोग सत्र कैसे पुनः आरंभ कर सकते हैं? चूंकि फ़ंक्शन उपयोगकर्ता को लॉगआउट करने में सक्षम नहीं होने लगता है।

+0

अपने कुकी साइट-व्यापी माना जाता है? –

+0

यह होना चाहिए? मेरे लिए कहना मुश्कित है? – arboles

+4

कुकीज़ को अनसेट करने के लिए सापेक्ष समय का उपयोग न करें। इससे परेशानियों को आपके उपयोगकर्ता की घड़ी पर सटीक बना दिया जाता है। '1' का समय उपयोग करें, जो सभी को पकड़ लेगा लेकिन वास्तव में टूटे हुए घड़ियों वाले लोग जो 1 9 70 के बारे में सोचते हैं। –

उत्तर

9

इस समस्या का समाधान है कि मैं कुकी अनसेट करने के लिए सही पथ सेट करने के लिए आवश्यक था चूंकि मैं इसे एक अलग फ़ाइल से अनसेट कर रहा था जिसे मैंने मूल रूप से सेट किया था।

मुझे पता चला कि मुझे अपने ब्राउजर कुकीज के अंदर कुकी की तलाश करके अनसेट के लिए किस मार्ग का उपयोग करने की आवश्यकता है, और एक बार मुझे अपने अंदर कुकी मिल गई ब्राउज़र, पथ कुकी के पास सूचीबद्ध किया गया था। इसलिए मैंने कुकी को पथ की तरह सेट किया:

setcookie("user_id", $user_id, time() - 1, "/social_learning/site_pages"); 

अंतिम पैरामीटर पथ है। और यह काम किया।

मेरी मूल setcookie इस तरह दिखता है:

setcookie("user_id", $user_id, time() + 7200, ""); 
24

कुकी की समाप्ति तिथि को अतीत में एक समय पर सेट करें (उदाहरण के लिए epoch के बाद एक सेकंड की तरह)।

setcookie("yourCookie", "yourValue", 1);

यह कुकी समाप्त करने के लिए कारण होगा।

10 के बजाय उपयोग किया जाता है, क्योंकि 0 कुकी के सत्र के अंत में समाप्त होने के लिए सेट करता है। setcookie के बारे में जानकारी के लिए php के मैनुअल में

+0

1 अतीत में एक समय माना जाता है? – arboles

+1

@arboles समय यूनिक्स टाइमस्टैम्प के रूप में दिया जाता है, इसलिए हाँ, 1 बहुत समय पहले था :) –

+13

1 "जनवरी का पहला, 1 9:70 00:00:01 पूर्वाह्न" –

3

देखो

http://php.net/manual/en/function.setcookie.php

ये नोट प्रक्रिया को समझा जाना चाहिए:

bool setcookie (string $name [, string $value [, int $expire = 0 [, string $path [, string $domain [, bool $secure = false [, bool $httponly = false ]]]]]]) 

कुकीज़ एक ही मानकों के साथ हटा दिया जाना चाहिए के रूप में वे निर्धारित किया गया के साथ। यदि मान तर्क एक खाली स्ट्रिंग है, या FALSE है, और सभी अन्य तर्क सेटक्यूकी पर पिछले कॉल से मेल खाते हैं, तो निर्दिष्ट नाम के साथ कुकी दूरस्थ क्लाइंट से हटा दी जाएगी। यह अतीत में एक वर्ष में 'हटाए गए' और समाप्ति समय पर मूल्य सेट करके आंतरिक रूप से हासिल किया जाता है।

FALSE के मान वाले कुकी को सेट करने से कुकी को हटाने का प्रयास किया जाएगा, आपको बूलियन मानों का उपयोग नहीं करना चाहिए। इसके बजाय, FALSE और TRUE के लिए 1 के लिए 0 का उपयोग करें।

+0

मैं वर्तमान में यह कर रहा हूं, हटाए जाने के लिए समान पैरामीटर का उपयोग कर, जैसा कि मैं सेट करना चाहता हूं। और यह काम नहीं कर रहा है। – arboles

6

वहाँ आप कोड के बारे में कुछ सुरक्षा चिंताओं, तथापि, आपके प्रश्न का उत्तर php में एक कुकी अनसेट करने के लिए कर रहे हैं, तुम सब करने की जरूरत है अतीत में एक बार करने के लिए समय सीमा समाप्ति समय निर्धारित करने की है:

setcookie("user_id", "", time()-10, "/"); 

"loginform.php" एक मान्य डोमेन नहीं है, जो यहां समस्या हो सकती है।

+0

मैं अपने स्थानीय होस्ट पर डोमेन कैसे सेट कर सकता हूं? – arboles

+0

बस मेरे जैसे उदाहरण में एक स्लैश डालें "/", यही है, इसका मतलब है कि यह कुकी आपके सभी डोमेन के लिए उपलब्ध है। –

1

php के मैनुअल में, आप एक समय समाप्ति तिथि स्थापना करके एक कुकी हटा सकते हैं इतिहास की बात है:

setcookie("key","",time()-3600); 

कुछ मामले में, आप तर्क के लिए पथ और डोमेन प्रदान करना चाहिए।

वास्तव में, यदि आप एक खाली स्ट्रिंग के साथ कुकी निर्दिष्ट करते हैं, यह भी सेट नहीं हो जाएगा:

setcookie("key",""); 
+0

मुझे पता है, मैं वर्तमान में इस विधि को कर रहा हूं, और यह काम नहीं कर रहा है। – arboles

+0

शायद आपको मैन्युअल रूप से पथ और डोमेन निर्दिष्ट करना पड़ सकता है। –

4

उपयोग इस कोड

setcookie("CookieName", "", time()-(60*60*24), "/"); 

हर वेबसाइट में मेरे लिए हर काम करता है