2012-02-06 14 views
24

में कुकी का उपयोग करना मैं कुकी का उपयोग करके अपनी वेबसाइट में कुछ पृष्ठों के पैरामीटर को पंजीकृत करना चाहता हूं। मैं नीचे दिए गए कोड की कोशिश की लेकिन पसंद नहीं जो मैं चाहता:asp.net mvc C#

<% 

HttpCookie cookie = Request.Cookies["search"] ; 

if ((cookie != null) && (cookie.Value != "")) 
{ 
    Response.Write(cookie.Values["dep_name"].ToString() + "---" + 
    cookie.Values["cat_name"].ToString() + "---" + cookie.Values["brand"].ToString()); 
} 
%> 

समस्या::

public ActionResult Index(int? dep, int? cat) 
{ 
    ...... 
    string theDept = Request.QueryString["dep"]; 
    HttpCookie cookie = new HttpCookie("search"); 
    cookie.Values["dep_name"] = theDept; 
    cookie.Expires = DateTime.Now.AddDays(1); 
    Response.Cookies.Add(cookie); 
    return View(); 
} 

मैं site.master में इसे पढ़ा जब मैं एक और पेज कि Request.QueryString["dep"] रिक्त है के लिए क्लिक करें, तो कुकी उस मैं प्रदर्शित करने के लिए शून्य है।

कुकी के बिना खोए बिना इसे कैसे स्टोर करें, जबकि हम अभी तक कुकी साफ़ नहीं करते हैं?

उत्तर

56

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

किसी भी मामले में, हालांकि, मेरा मानना ​​है कि यह:

HttpCookie cookie = new HttpCookie("search"); 

खोज कुकी

रीसेट एक कुकी प्राप्त करने के लिए होगा:

HttpCookie cookie = HttpContext.Request.Cookies.Get("some_cookie_name"); 

एक कुकी के होने की जाँच करने के लिए:

HttpContext.Request.Cookies["some_cookie_name"] != null 

HttpCookie cookie = new HttpCookie("some_cookie_name"); 
HttpContext.Response.Cookies.Remove("some_cookie_name"); 
HttpContext.Response.SetCookie(cookie); 
+0

मैं लगभग छह साल के लिए वेब सामग्री कर रहा हूँ और मैं अभी हाल ही में पहली बार के लिए एक कुकी सेट से जुड़े एक कार्य दिया गया था। अजीब, जंगली सामान। यह मदद करता है, धन्यवाद! – MrBoJangles

+4

स्पष्टीकरण के लिए, आप इस कंट्रोलर को कचरे से भरने से बचने के लिए एमवीसी प्रोजेक्ट के अंदर यह कोड कहां रखेंगे? –

+0

लाइन 'HttpContext.Response.Cookies.Remove' कुकी को सहेजने से नहीं हटाती है? – Jaylen

14

मैं कुकी प्राप्त कर रहा है का आयोजन किया और एक संगठित तरीके से डालने ऐसी है कि वह आवेदन भर इस्तेमाल किया जा सकता है: एक कुकी को बचाने के लिए। उस उद्देश्य के लिए मैंने दो विधियों SetCookie और GetCookie डाल दिए।

आप बस इस कक्षा को अपने कोड में डाल सकते हैं और काम कर सकते हैं।

यहाँ मैं स्थिर तरीकों

public class CookieStore 
{ 
    public static void SetCookie(string key, string value, TimeSpan expires) 
    { 
     HttpCookie encodedCookie = HttpSecureCookie.Encode(new HttpCookie(key, value)); 

     if (HttpContext.Current.Request.Cookies[key] != null) 
     { 
      var cookieOld = HttpContext.Current.Request.Cookies[key]; 
      cookieOld.Expires = DateTime.Now.Add(expires); 
      cookieOld.Value = encodedCookie.Value; 
      HttpContext.Current.Response.Cookies.Add(cookieOld); 
     } 
     else 
     { 
      encodedCookie.Expires = DateTime.Now.Add(expires); 
      HttpContext.Current.Response.Cookies.Add(encodedCookie); 
     } 
    } 
    public static string GetCookie(string key) 
    { 
     string value = string.Empty; 
     HttpCookie cookie = HttpContext.Current.Request.Cookies[key]; 

     if (cookie != null) 
     { 
      // For security purpose, we need to encrypt the value. 
      HttpCookie decodedCookie = HttpSecureCookie.Decode(cookie); 
      value = decodedCookie.Value; 
     } 
     return value; 
    } 

} 

इन आप आसानी से कुकी का मान संग्रहीत करने और मूल्य प्राप्त कर सके जब भी आवश्यक

इन तरीकों का उपयोग कर उपयोग करने के साथ मेरी कक्षा डाल

के रूप में सरल है कुकी सेट करने के लिए:

CookieStore.SetCookie("currency", "GBP", TimeSpan.FromDays(1)); // here 1 is no of days for cookie to live 
,210

हो रही कुकी के लिए:

string currency= CookieStore.GetCookie("currency"); 
+0

सहेजते समय, मौजूदा कुकी को नया सेट करने के बजाय अपडेट क्यों करें? –

+1

मुझे एक मुद्दा मिला है कि जब मैं जनवरी 1 0001 के रूप में समाप्ति तिथि के साथ त्वरित घड़ी में देखा जाता है तो मुझे दो बार कुकी मिलती है, इसलिए इसे अपडेट करने के लिए सोचा जाता है। –

+0

क्या आप http://www.nuget.org/packages/httpsecurecookie/ से HttpSecureCookie का उपयोग कर रहे हैं? –