2009-04-09 14 views
9

मैं के साथ एक कुकी सेट कर रहा हूँ:कुकीज़ हमेशा समाप्त हो गई है कर रहे हैं

HttpCookie cookie = new HttpCookie("simpleorder"); 
cookie.Expires = DateTime.Now.AddYears(1); 
cookie["order"] = carModel.ToString(); 
cookie["price"] = price.ToString(); 
Response.Cookies.Add(cookie); 

लेकिन जब मैंने उसे कुछ ही सेकंड बाद में यह समाप्त हो गया है की जाँच करें और समय सीमा समाप्ति दिनांक {01-01-0001 00:00 बजे तक के लिए निर्धारित है: 00}। मैं कुकी किसी भी जगह स्पष्ट नहीं है

HttpCookie cookie = Request.Cookies["simpleorder"]; 
if (cookie != null && cookie.Expires > DateTime.Now)... 

मैं द्वारा कोड प्राप्त करने का प्रयास है, तो मैं नहीं जानता कि क्यों यह समाप्त हो रहा है?

+0

क्या आप अपनी कुकी अपडेट करते हैं? यदि आप समाप्ति समय निर्धारित किए बिना अपनी कुकी अपडेट करते हैं, तो यह अब मौजूद नहीं होगा। –

उत्तर

17

यह सामान्य गलत समझ है। अनुरोध कुकी संग्रह अनुरोध कुकी कुकी में शामिल कुकीज़ का प्रतिनिधित्व करता है। ऐसी कुकीज में समाप्त होने पर संबंधित कोई जानकारी नहीं होती है। कड़ाई से बोलते हुए .NET को दो अलग-अलग प्रकारों (RequestCookie और ResponseCookie) का उपयोग करना चाहिए था, लेकिन इसके बजाय दोनों परिस्थितियों के लिए एक ही प्रकार का उपयोग करना चुना।

समाप्ति मूल्य केवल प्रतिक्रिया में कुकीज़ जोड़ते समय समझ में आता है।

+1

तो कुकी का समय समाप्त होने की जांच करने का एकमात्र तरीका यह जांचना है कि यह मौजूद है या नहीं? –

+1

हां इसके बारे में है। – AnthonyWJones

+1

एक सामान्य समाधान, यदि आपको समाप्ति तिथि जानने की आवश्यकता है, तो इसे कुकी के अंदर एक मूल्य के रूप में सहेजना है। यह अचानक सिंक से बाहर हो सकता है, लेकिन अगर यह एक httponly कुकी है, तो आपके पास यह सुनिश्चित करने की शक्ति है कि ऐसा नहीं होता है;) –

2

पहले मैं भी निराश था कि अनुरोध कुकीज़ में Expires मान नहीं है, लेकिन फिडलर 2 का उपयोग करके डिबगिंग के बाद, मुझे पता है कि http प्रोटोकॉल में अनुरोध कुकीज़ के लिए Expires मान शामिल नहीं है। अनुरोध कुकीज़ के लिए .NET Framework Expires मान को उजागर करने का कोई तरीका नहीं है।

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

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

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