2010-09-17 16 views
33

मुझे आश्चर्य है कि मुझे कोई जवाब नहीं मिला।सत्र के अंत में समाप्त होने वाली कुकी सेट करें? asp.net

सत्र के अंत में समाप्त होने के लिए मैं अपनी कुकी में अपना सत्रिड कैसे सेट करूं? (जब ब्राउजर बंद हो जाता है या उपयोगकर्ता समय के लिए निष्क्रिय रहता है)।

दो समाधान मैंने पाया

(httpcookie).Expires = HttpContext.Current.Session.Timeout 

कौन सा मुझे एक संकलन त्रुटि दे दी है तो मैं अगर उपयोगकर्ता पोस्ट करने से पहले अपने कोड की जाँच की पता नहीं है थे। और दूसरा 1 दिन पहले समाप्त होने की तारीख तय करना था, जो मेरा आंत कहता है गलत है। मैं यह कैसे करु?

+0

http://stackoverflow.com/questions/12582689/delete-cookies-on-session-timeout – Shurmajee

उत्तर

2

TimeOutint, ExpiresDateTime की अपेक्षा करता है, यही कारण है कि वह कोड संकलित नहीं होगा। अतीत में समाप्ति तिथि को आज तक सेट करना कुकी को तुरंत रद्द कर देता है, इसलिए संभवतः वह नहीं है जो आप चाहते हैं। यदि आपने समाप्ति तिथि को अप्रयुक्त छोड़ दिया है, तो जैसे ही उपयोगकर्ता ब्राउज़र बंद कर देता है, कुकी समाप्त हो जाएगी।

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

समस्या पर विस्तार करने के लिए स्वतंत्र महसूस करें।

+0

कैसे मैं 'बस सत्र का उपयोग' करते हैं? –

+0

इसका मतलब है कि मौजूदा चीजों को कुकी में छोड़ दें और बस सत्र का उपयोग करें। यदि आपको वास्तव में * सत्र * का उपयोग करने के बारे में जानने की आवश्यकता है, तो इसके लिए प्रश्न हैं। एक छोटा उदाहरण है 'सत्र ["कुछकी"] = कुछ स्ट्रिंग; स्ट्रिंग पुनर्प्राप्त वैल्यू = (स्ट्रिंग) सत्र ["कुछकी"]; ' –

+0

+1। मैं उल्लेख करना चाहता हूं कि 'HttpContext.Current.Session' शून्य था इसलिए मैं बस कुकीज़ के साथ गया और उपयोगकर्ता द्वारा आपके द्वारा उल्लेखित प्रत्येक बार समाप्ति तिथि का विस्तार किया। –

50

आप एक गैर-लगातार कुकी के बारे में बात कर रहे हैं। डिफ़ॉल्ट रूप से asp.net कुकीज़ को इस तरह भेजता है। उनके बीच मुख्य अंतर यह है कि एक सतत कुकी की अवधि समाप्त हो जाती है।

तो, यदि आप कुकी को जारी रखना नहीं चाहते हैं, तो समाप्ति मान सेट न करें।

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

अब, अगर वे किसी भी समय ब्राउज़र बंद कर देते हैं, तो कुकी को बाहर कर दिया जाएगा।

प्वाइंट है, समाप्ति शीर्षलेख सेट न करें। विशेष रूप से जब सत्र की तारीख समाप्त हो जाती है। सत्र तिथियां आम तौर पर भविष्य में केवल 20 या इतनी मिनट होती हैं, लेकिन समाप्ति तिथि आगे बढ़ती है क्योंकि उपयोगकर्ता आपकी साइट के माध्यम से ब्राउज़ करता है।

===== अद्यतन =====

मैं परीक्षण के लिए निम्न कोड का प्रयोग किया:

protected void Page_Load(object sender, EventArgs e) { 
     if (!Page.IsPostBack) { 
      HttpCookie c = Request.Cookies["test"]; 
      if (c != null) { 
       Response.Write(String.Format("test value is {0} <br />", c.Value)); 
      } 
     } else { 
      HttpCookie c = new HttpCookie("test"); 
      c.Value = "HERE IT IS"; 
      Response.Cookies.Add(c); 
     } 
    } 

    protected void Button1_Click(object sender, EventArgs e) { 
     Response.Write("clicked<br />"); 
    } 

.aspx फ़ाइल सरल एक बटन जो कि Button1_Click हैंडलर निकाल दिया था। जब मैं प्रारंभ में किसी भी नवीनतम ब्राउज़र (यानी, फ़ायरफ़ॉक्स, क्रोम) का उपयोग करके इसे ब्राउज़ करता हूं तो कोई कुकी नहीं होती है। एक कुकी सेट होने पर बटन क्लिक करने के बाद। तब मैं ब्राउज़र पूरी तरह से बंद कर दिया, फिर से खोल दी और साइट पर वापस ब्राउज़ किया था। सभी मामलों में कुकी चला गया था।

+1

ठंडा, इसलिए समाधान कुछ भी स्पर्श नहीं करता है, बस कुकी मान सेट करें और उसे छोड़ दें। मैंने सोचा कि इसके लिए और भी कुछ था। –

+1

नहीं। यह बहुत आसान है। – NotMe

+0

इससे पहले कि मैं इसे स्वीकार्य मानूं, मैं जानना चाहता हूं। मैंने अपना फ़ायरफ़ॉक्स (3.6.10) ब्राउज़र बंद कर दिया और इसे फिर से खोल दिया। मैं अभी भी लॉग इन था। क्यों? ऐसा लगता है कि 30 मिनट तक की समाप्ति को अपडेट/सेट करना एक अच्छा समाधान जैसा लगता है। –

8

यह ध्यान रखें कि इन दिनों आप एक सत्र कुकी पर भरोसा नहीं कर सकते हैं नष्ट कर दिया जा रहा है जब उपयोगकर्ता ब्राउज़र बंद कर देता महत्वपूर्ण है। Chrome और Firefox कि परिवर्तन 2012 में वापस या तो बनाया - this answer पर विभिन्न लिंक देखते हैं।

अब, सत्र कुकीज़ को हटाने में विफल होने से मुझे एक भयानक, भयानक, कोई अच्छा, बहुत बुरा सुरक्षा छेद नहीं होता है, हर प्रासंगिक आरएफसी का उल्लंघन नहीं करने के लिए, लेकिन स्पष्ट रूप से हमारे Google (और मोज़िला) ओवरलोर्ड्स बेहतर जानते हैं।

मुझे यकीन नहीं है कि सबसे अच्छा कामकाज क्या है, लेकिन मैं जो दृष्टिकोण ले रहा हूं वह कुकी पर "समाप्ति" संपत्ति को प्रत्येक कॉल के बाद भविष्य में एक घंटे तक रीसेट करना है। यह वांछित व्यवहार नहीं है, लेकिन मुझे लगता है कि महत्वपूर्ण कुकीज़ को मूल रूप से हमेशा के लिए चिपकने की अनुमति देने से बेहतर है।

अन्य सुझावों या स्पष्टीकरणों के लिए खोलें।

+0

यदि आप कुकी का निर्माण करने में गुणवत्ता का समय बिताते हैं, तो यह अनुरोध-आधारित लोड संतुलन में एक जीवन बचतकर्ता हो सकता है। बेशक, कुछ भी 100% सुरक्षित नहीं है लेकिन कुकी के अंदर एक एन्क्रिप्टेड टिकट पैकेज अन्य Obfuscation पैटर्न का उपयोग किए बिना सबसे अच्छा तरीका है। – GoldBishop

1

लॉगिन नियंत्रण का उपयोग न करें, यह कठिन बनाता है।

protected void btnLogin_Click(object sender, EventArgs e) 
{ 
    // Check user and password in database 
    bool isValidUser = ValidateUser(txtUsername.Text, txtPassword.Text); 

    // Set cookie to be not persistent - this means if the user closes the browser, 
    //autentification cookie will be deleted and the user is not longer logged 
    bool isPersistentCookie = false; 

    // Login user with the new username 
    FormsAuthentication.SetAuthCookie(txtUsername.Text, isPersistentCookie); 
} 
संबंधित मुद्दे