2012-02-06 45 views
24

Tôi muốn đăng ký tham số của một vài trang trong trang web của tôi bằng cookie. Tôi đã thử đoạn code dưới đây nhưng không giống như những gì tôi muốn:Sử dụng cookie trong asp.net mvc C#

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(); 
} 

tôi đọc nó trong Site.Master:

<% 

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()); 
} 
%> 

Vấn đề: Khi tôi bấm đến một trang khác mà Request.QueryString["dep"] là null, cookie mà Tôi hiển thị là null.

Làm thế nào để lưu trữ nó trong cookie mà không bị mất trong khi chúng tôi chưa xóa cookie?

Trả lời

56

Tôi không chắc mình có hiểu không nếu đây là câu hỏi về cách gửi cookie đúng cách cho khách hàng hoặc một số lỗi với thông số chuỗi truy vấn của bạn. Vì vậy, tôi sẽ đăng đúng cách để gửi cookie và cảm thấy tự do để sửa tôi nếu tôi hiểu lầm.

Trong mọi trường hợp, mặc dù tôi tin rằng đây:

HttpCookie cookie = new HttpCookie("search"); 

sẽ thiết lập lại cookie tìm kiếm

Để có được một cookie:

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

Để kiểm tra sự tồn tại của một cookie:

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

Để lưu cookie:

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

Tôi đã làm công cụ web cho gần sáu năm và tôi đã được trao một nhiệm vụ liên quan đến thiết lập một cookie cho lần đầu tiên chỉ gần đây. Lạ lùng, thứ hoang dã. Điều này giúp, cảm ơn! – MrBoJangles

+4

Để làm rõ, bạn sẽ đặt mã này vào bên trong dự án MVC nào để tránh làm đầy bộ điều khiển bằng thùng rác? –

+0

không phải dòng 'HttpContext.Response.Cookies.Remove' sẽ xóa cookie không lưu nó? – Jaylen

14

tôi đã tổ chức tìm nạp cookie và chèn theo cách có tổ chức để có thể sử dụng trong suốt ứng dụng. vì mục đích đó tôi đặt hai phương thức SetCookieGetCookie.

Bạn chỉ cần đặt lớp này vào mã của mình và làm việc.

Ở đây tôi đặt lớp học của tôi với các phương pháp tĩnh

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; 
    } 

} 

sử dụng các bạn có thể dễ dàng lưu trữ các giá trị trong cookie và lấy giá trị bất cứ khi nào cần thiết

sử dụng các phương pháp này là đơn giản như

Để đặt cookie:

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

Để Bắt Cookie:

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

Khi lưu, tại sao phải cập nhật cookie hiện tại thay vì đặt cookie mới? –

+1

tôi gặp sự cố khi tôi tìm thấy cookie hai lần khi được xem trong một chiếc đồng hồ nhanh có ngày hết hạn là tháng 1 0001, vì vậy hãy nghĩ để cập nhật nó. –

+0

Bạn đang sử dụng HttpSecureCookie từ http://www.nuget.org/packages/httpsecurecookie/? –

Các vấn đề liên quan