Response.Cookies पर Request.Cookies का उपयोग कब करें?


57

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

39

वेब एप्लिकेशन में अनुरोध ब्राउज़र से आता है और प्रतिक्रिया वह है जो सर्वर वापस भेजता है। ब्राउज़र से कुकीज़ या कुकी डेटा को सत्यापित करते समय आपको Request.Cookies का उपयोग करना चाहिए। जब आप ब्राउज़र पर भेजे जाने वाले कुकीज़ का निर्माण कर रहे होते हैं तो आपको उन्हें Response.Cookies में जोड़ने की आवश्यकता होती है।


95

वे 2 अलग अलग बातें, एक बचाता [प्रतिक्रिया], अन्य पुस्तकें [अनुरोध]

एक कुकी में

(सूचना विज्ञान बोल) :) यदि आप एक छोटे फ़ाइल की एक अवधि के लिए बचाने के लिए कर रहे हैं समय जो .NET ढांचे में प्रकार स्ट्रिंग

का एक उद्देश्य होता है आप save a cookie कर:

HttpCookie myCookie = new HttpCookie("MyTestCookie"); 
DateTime now = DateTime.Now; 

// Set the cookie value. 
myCookie.Value = now.ToString(); 
// Set the cookie expiration date. 
myCookie.Expires = now.AddMinutes(1); 

// Add the cookie. 
Response.Cookies.Add(myCookie); 

Response.Write("<p> The cookie has been written."); 

आपने एक कुकी लिखी जो एक मिनट के लिए उपलब्ध होगी ... आम तौर पर हम करते हैं। AddMonth (1) ताकि आप एक पूरे महीने के लिए कुकी को बचा सकें।

retrieve a cookie के लिए, आपको अनुरोध, जैसे का उपयोग करें (अनुरोध कर रहे हैं):

HttpCookie myCookie = new HttpCookie("MyTestCookie"); 
myCookie = Request.Cookies["MyTestCookie"]; 

// Read the cookie information and display it. 
if (myCookie != null) 
    Response.Write("<p>"+ myCookie.Name + "<p>"+ myCookie.Value); 
else 
    Response.Write("not found"); 

याद रखें:

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

यह कुकी को हटा देगा।

जैसा कि आप देख सकते हैं, हर बार जब कुकी का जीवन समाप्त हो जाता है, तो वह फ़ाइल स्वचालित रूप से सिस्टम से हटा दी जाती है।

+7

+1 मुझे नहीं पता था कि आप समाप्ति 29 apr. 102010-04-29 10:48:05

+2

+1 स्पष्ट अभी तक इसे आसानी से समझा 27 aug. 132013-08-27 12:49:19

+1

यह ज्यादातर मददगार था अद्यतन करने के लिए कुकी फिर से बचाने के लिए किया था सही है, लेकिन जब से थोड़ा भ्रामक आपके उदाहरण में जब आप कुकी को पुनर्प्राप्त करने के लिए जाते हैं तो आप वास्तव में उस कुकी को ओवरराइट करते हैं जिसे पहले 'एचटीपी कूकी मायक्यूकी = नई एचटीपी कूकी ("माईटेस्ट कूकी") से बचाया गया था;' इसके बजाय 'एचटीपी कूकी मायक्यूकी = नई एचटीपी कूकी ("MyWrittenCookie") जैसे कुछ का उपयोग करें। ; ' 14 nov. 132013-11-14 20:16:28

+1

यह उस कुकी को पढ़ने का समर्थन नहीं करता है जिसे अभी प्रतिक्रिया में भेजा गया है, जिस स्थिति में आपको 'Response.Cookies' 13 oct. 152015-10-13 03:27:17

  0

का उपयोग करने की आवश्यकता है, मुझे विश्वास है कि यह सर्वर सत्य कोड प्रोग्रामिंग करते समय यह सच है। क्लाइंट कोड के लिए यह दूसरा रास्ता है। 30 mar. 172017-03-30 08:59:06


4

कुकीज अनुरोध से कुकीज संग्रह में आता है। कुकीज संग्रह। यही वह जगह है जहां आप भेजे गए कुकीज़ को पढ़ते हैं।

कुकीज़ पर वापस कुकीज़ भेजने के लिए आपने उन्हें Response.Cookies संग्रह में रखा है।

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


16

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

मैं थोड़ी देर के लिए इस पैटर्न का उपयोग कर रहा हूं और यह मेरे लिए अच्छा काम करता है।

public void WriteCookie(string name, string value) 
{ 
    var cookie = new HttpCookie(name, value); 
    HttpContext.Current.Response.Cookies.Set(cookie); 
} 


public string ReadCookie(string name) 
{ 
    if (HttpContext.Current.Response.Cookies.AllKeys.Contains(name)) 
    { 
     var cookie = HttpContext.Current.Response.Cookies[name]; 
     return cookie.Value; 
    } 

    if (HttpContext.Current.Request.Cookies.AllKeys.Contains(name)) 
    { 
     var cookie = HttpContext.Current.Request.Cookies[name]; 
     return cookie.Value; 
    } 

    return null; 
} 
+4

एक वैकल्पिक लेकिन समान दृष्टिकोण केवल आपकी कुकी को Response.Cookies और Request.Cookies संग्रह में सहेजने के लिए लिखना होगा। इस तरह, चक्र में कोई और तर्क उस कुकी को पढ़ सकता है जिसे आपने अभी प्रतिक्रिया ऑब्जेक्ट को देखे बिना सेट किया है। 23 feb. 092009-02-23 00:59:23

  0

क्रिस, सहमत हुए और मैं ऐसा करता था लेकिन मैंने हाल ही में पढ़ा है कि अनुरोध ऑब्जेक्ट को संशोधित करना नो-नो है। एक संदर्भ खोजने की कोशिश करेंगे। 23 feb. 092009-02-23 01:11:32

  0

धन्यवाद, क्रिस। एंड्रयू - मुझे उस संदर्भ को देखना अच्छा लगेगा। अभी के लिए मैं क्रिस के समाधान के साथ जा रहा हूँ। 09 sep. 092009-09-09 19:30:37

  0

एक उपयोगी पैटर्न, लेकिन ध्यान दें कि यह 100% धागा सुरक्षित नहीं है 12 sep. 132013-09-12 20:50:52


2

जब मैं .NET में कुकी बना या अद्यतन करता हूं तो मैं आमतौर पर अनुरोध और प्रतिक्रिया कुकी संग्रह दोनों के लिए करता हूं। इस तरह आप सुनिश्चित कर सकते हैं कि यदि आप पेज अनुरोध अनुक्रम के नीचे कुकी को पढ़ने की कोशिश करते हैं तो इसमें सही जानकारी होगी।

  0

एलेक्स, यह विशेष मुद्दा मुझे पूरे दिन परेशान कर रहा है। इसे इतनी आसानी से साफ़ करने के लिए धन्यवाद! 09 sep. 092009-09-09 19:29:53

  0

ये, कुछ रोचक व्यवहार हैं जहां प्रतिक्रिया में एक कुकी सेट करने से यह अनुरोध में भी सेट हो जाएगा यदि यह पहले से मौजूद नहीं था। लेकिन अगर यह पहले से ही अनुरोध में मौजूद था, तो सेटिंग प्रतिक्रिया अद्यतन अद्यतन नहीं करता है। तो एक सहायक की तरह लगता है कि सहायक होने का इरादा है, लेकिन कुछ हद तक असंगत है। निश्चित रूप से एक ही अनुरोध में एक कुकी mulitiple बार संशोधित करते समय आप बग में चला सकते हैं। 09 jul. 142014-07-09 21:31:02


1

एंड्रयू कोड ने "AllKeys.Contains" विधि में एक त्रुटि दी। तो मैं एक छोटे से ..

public void WriteCookie(string strCookieName, string strCookieValue) 
    { 
     var hcCookie = new HttpCookie(strCookieName, strCookieValue); 
     HttpContext.Current.Response.Cookies.Set(hcCookie); 
    } 


    public string ReadCookie(string strCookieName) 
    {  
     foreach (string strCookie in HttpContext.Current.Response.Cookies.AllKeys) 
     { 
      if (strCookie == strCookieName) 
      { 
       return HttpContext.Current.Response.Cookies[strCookie].Value; 
      } 
     }   

     foreach (string strCookie in HttpContext.Current.Request.Cookies.AllKeys) 
     { 
      if (strCookie == strCookieName) 
      { 
       return HttpContext.Current.Request.Cookies[strCookie].Value; 
      } 
     } 

     return null; 
    } 
  0

क्या आपको System.Linq शामिल करना याद आया? ऐसा करने से मेरी फाइल पर त्रुटि ठीक हुई। 06 feb. 122012-02-06 16:04:44

  0

यदि यह केवल एक छोटी त्रुटि है तो उत्तर को डुप्लिकेट करने से पहले मूल पोस्ट में एक संपादन का सुझाव दें। 06 dec. 122012-12-06 17:11:46