2013-04-08 3 views
24

वहाँ ASP.NET में बहु मूल्य कुकीज़ बनाने के लिए कुछ अलग तरीके हैं:अंतर: setcookie, AppendCookie, Cookies.Add

var cookie = new HttpCookie("MyCookie"); 
cookie["Information 1"] = "value 1"; 
cookie["Information 2"] = "value 2"; 

// first way 
Response.Cookies.Add(cookie); 

// second way 
Response.AppendCookie(cookie); 

// third way 
Response.SetCookie(cookie); 

मैं किस तरफ जब इस्तेमाल करना चाहिए? मैंने पढ़ा है कि SetCookie विधि कुकी को अपडेट करती है, अगर यह पहले से बाहर निकलती है। क्या अन्य तरीकों से मौजूदा कुकी भी अपडेट नहीं होती है?

और क्या निम्न कोड कुकीज लिखने के लिए निम्न कोड सर्वोत्तम अभ्यास है?

Response.Cookies["MyCookie"].Value = "value";

उत्तर

14

मुझे किस तरह का उपयोग करना चाहिए?

यह उस कुकी ऑपरेशन पर निर्भर करता है जो आप करना चाहते हैं।

ध्यान दें कि Add और AppendCookie तथ्य यह है कि AppendCookie साथ आप Responseclass की Cookies संपत्ति को संदर्भित नहीं कर रहे हैं और यह आप के लिए यह कर रहा है को छोड़कर ही कार्यक्षमता कर रहे हैं।

  • Response.Cookies.Add - निर्दिष्ट कुकी जोड़ता कुकी संग्रह करने के लिए।
  • Response.AppendCookie - कुकी संग्रह में अपडेट एक मौजूदा कुकी - एक HTTP कुकी जोड़ता आंतरिक कुकी संग्रह
  • Response.SetCookie करने के लिए।

Exceptions फेंक नहीं दिया जाएगा जब कुकीज डुप्लिकेट जोड़े जाते हैं या जब मौजूद कुकी को अद्यतन करने का प्रयास नहीं किया जाता है।

इन तरीकों में से मुख्य exception है: HttpException (के बाद HTTP हेडर भेज दिया गया है एक कुकी जोड़ दिया जाता है।)

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

MSDN के लिए धन्यवाद!

+2

'SetCookie' मौजूदा कुकी अपडेट करता है: क्या इसका मतलब यह है कि यदि कुकी मौजूद नहीं है तो कोई अपवाद होगा या कुकी सेट नहीं की जाएगी? और क्या अन्य विधियां कुकी को अद्यतन करती हैं यदि पहले से ही एक ही नाम वाली कुकी है? –

+0

@FelixC मेरे अपडेट देखें। –

+1

ठीक है, समझाए जाने के लिए धन्यवाद .. लेकिन तब मुझे समझ में नहीं आता कि किसी अन्य विधि का उपयोग 'Response.SetCookie' के रूप में कब किया जाए - क्योंकि यह अद्वितीय कुकीज़ लिखने का सबसे सुरक्षित तरीका है। –

24

अगर मैं सही ढंग से याद दोनों

Response.Cookies.Add(..) 

और

Response.AppendCookie(..) 

एक ही नाम के कई कुकीज़ जवाबी कार्रवाई के लिए संलग्न किया जा करने की अनुमति देगा।

दूसरी ओर

Response.SetCookie(..) 

और

Response.Cookies[key].Value = value; 

पर हमेशा एक ही नाम के पिछले कुकीज़ ऊपर लिख देगा।

+5

इस उत्तर स्पष्ट और बात करने के लिए अधिक है। – Oliver

+10

दोनों ['AppendCookie'] (http://msdn.microsoft.com/en-us/library/system.web.httpresponse.appendcookie) के लिए संदर्भ प्रलेखन (एमएसडीएन) पर निम्न संदेश इंगित करने के लायक है और [ 'SetCookie'] (http://msdn.microsoft.com/en-us/library/system.web.httpresponse.setcookie): * "यह एपीआई .NET Framework आधारभूत संरचना का समर्थन करता है और इसका उद्देश्य सीधे आपके द्वारा उपयोग नहीं किया जाना है कोड। "* – tne

+0

विकल्प 'System.Web.HttpCookieCollection.Set (HttpCookie कुकी)' और 'System.Web.HttpCookieCollection.Add (HttpCookie कुकी)' उदाहरण का उपयोग करना है। 'Response.Cookies.Set (नया HttpCookie ("cookieName")) '। –

5

tne's पर पिगबैक करने के लिए विकीटर के उत्तर में AppendCookie और SetCookie का उपयोग नहीं किया जाना चाहिए - वे .NET ढांचे द्वारा आंतरिक उपयोग के लिए हैं। उन्हें सार्वजनिक नहीं होना चाहिए, लेकिन वे हैं, मेरा अनुमान आईआईएस पाइपलाइन के लिए कहीं और हैक के रूप में होगा।

तो आप अपने कुकी सेटिंग इस तरह से करना चाहिए (या एकाधिक कुकी सेट करने के लिए एक विस्तार विधि लिखना):

string cookieName = "SomeCookie"; 
string cookieValue = "2017"; 

if (Response.Cookies[cookieName] == null) 
{ 
    Response.Cookies.Add(new HttpCookie(cookieName, cookieValue)); 
} 
else 
{ 
    Response.Cookies[cookieName].Value = cookieValue; 
}