2010-11-23 14 views
5

के बीच संबंध मैं कोड के साथ प्रयोग कर रहा हूं जो HttpContext.Response में सभी कुकीज़ साफ़ कर देगा।HttpContext.Request.Cookies और HttpContext.Response.Cookies

प्रारंभ में, मैं इस प्रयोग किया है:

DateTime cookieExpires = DateTime.Now.AddDays(-1); 

for (int i = 0; i < HttpContext.Request.Cookies.Count; i++) 
{ 
    HttpContext.Response.Cookies.Add(
     new HttpCookie(HttpContext.Request.Cookies[i].Name, null) { Expires = cookieExpires }); 
} 
हालांकि

, इस के साथ एक OutOfMemoryException क्योंकि for पाश कभी नहीं बाहर निकालता त्रुटि होगी - हर बार जब आप Response करने के लिए कुकी जोड़ने के लिए, यह भी `अनुरोध पर जुड़ जाता है ।

निम्नलिखित दृष्टिकोण काम करता है:

DateTime cookieExpires = DateTime.Now.AddDays(-1); 

List<string> cookieNames = new List<string>(); 

for (int i = 0; i < HttpContext.Request.Cookies.Count; i++) 
{ 
    cookieNames.Add(HttpContext.Request.Cookies[i].Name); 
} 

foreach (string cookieName in cookieNames) 
{ 
    HttpContext.Response.Cookies.Add(
     new HttpCookie(cookieName, null) { Expires = cookieExpires }); 
} 

तो, वास्तव में HttpContext.Request.Cookies और HttpContext.Response.Cookies के बीच संबंध क्या है?

उत्तर

11

Request.Cookies में कुकीज का पूरा सेट होता है, जो ब्राउजर सर्वर पर भेजते हैं और जो आपने अभी सर्वर पर बनाए हैं।

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

प्रलेखन राज्यों:

ASP.NET दो आंतरिक कुकी संग्रह भी शामिल है। संग्रह को के कुकीज़ संग्रह के माध्यम से एक्सेस किया गया है HttpRequest में कुकीज़ द्वारा क्लाइंट द्वारा सर्वर पर कुकी हेडर में प्रेषित किया गया है। संग्रह के माध्यम से संग्रहीत संग्रह HttpResponse के कुकीज संग्रह में सर्वर पर बनाई गई नई कुकीज़ शामिल हैं और सेट-कुकी शीर्षलेख में क्लाइंट पर प्रेषित की गई हैं।

आप HttpResponse.Cookies संग्रह का उपयोग करके एक कुकी जोड़ने के बाद, कुकी भी अगर प्रतिक्रिया ग्राहक के लिए नहीं भेजा गया है HttpRequest.Cookies संग्रह में तुरंत उपलब्ध है। यदि आप for पाश पीछे की ओर चलने के


आपका पहला कोड नमूना काम करना चाहिए।
नई कुकीज़ अंत के बाद जोड़ दी जाएगी, इसलिए पिछला लूप उन्हें अनदेखा कर देगा।