2008-10-16 42 views
14

Tôi có đoạn mã sau đó đặt một cookie:Cookie mất giá trị trong ASP.net

string locale = ((DropDownList)this.LoginUser.FindControl("locale")).SelectedValue; 
    HttpCookie cookie = new HttpCookie("localization",locale); 
    cookie.Expires= DateTime.Now.AddYears(1); 
    Response.Cookies.Set(cookie); 

Tuy nhiên, khi tôi cố gắng đọc các tập tin cookie, giá trị là Null. Cookie tồn tại. Tôi không bao giờ vượt qua những điều sau nếu kiểm tra:

  if (Request.Cookies["localization"] != null && !string.IsNullOrEmpty(Request.Cookies["localization"].Value)) 

Trợ giúp?

+0

Sử dụng LiveHTTPHeaders để xem liệu các cookie được trở lại trình duyệt http s: //addons.mozilla.org/en-US/firefox/addon/3829 –

+0

Đừng quên chấp nhận câu trả lời cho câu hỏi –

Trả lời

41

Séc được thực hiện sau khi đăng lại? Nếu vậy, bạn nên đọc cookie từ bộ sưu tập Yêu cầu thay thế.

Cookie được duy trì cho trình duyệt bằng cách thêm chúng vào Response.Cookies và được đọc lại từ Request.Cookies.

Cookie được thêm vào phản hồi chỉ có thể được đọc nếu trang có cùng yêu cầu.

+0

Không chắc chắn tại sao Response.Cookies đang xóa các giá trị, nhưng cảm ơn. Bạn đã cứu tôi rất nhiều thời gian. –

0

Bạn có mệt mỏi "Yêu cầu" bộ sưu tập thay vì bộ sưu tập "Phản hồi" không?

 
if (Request.Cookies["localization"] != null && !string.IsNullOrEmpty(Request.Cookies["localization"].Value)) 
-1

sử dụng Response.Cookies.Add (cookie); thay vì Response.Cookies.Set (cookie);

0

Hãy thử đoạn này -

string locale = ((DropDownList)this.LoginUser.FindControl("locale")) 
                .SelectedValue; 
HttpCookie myCookie = new HttpCookie("localization"); 
Response.Cookies.Add(myCookie); 
myCookie.Values.Add("locale", locale); 
Response.Cookies["localization"].Expires = DateTime.Now.AddYears(1); 

& để đọc nó -

if (Request.Cookies["localization"] != null) 
{ 
    HttpCookie cookie = Request.Cookies["localization"]; 
    string locale = cookie.Values["locale"].ToString(); 
} 
0

nếu bạn đang biên soạn trong chế độ gỡ lỗi, bật tracing cho các trang trong câu hỏi và chắc chắn rằng cookie là trong bộ sưu tập yêu cầu. Đặt dấu vết trong chỉ thị @page trong tệp aspx.

0

Tôi gặp sự cố tương tự, tôi không thể đọc cookie khi đăng lại. Vấn đề đối với tôi là tôi đã kiểm tra thuộc tính Secure của cookie là true. Người ta nói rằng khi thuộc tính Secure của cookie được bật, nó sẽ khiến cookie chỉ được truyền nếu kết nối sử dụng Lớp cổng bảo mật. Tôi không chắc chắn, tuy nhiên, làm thế nào tôi đã có thể nhìn thấy cookie trong trình duyệt lần đầu tiên, nhưng không phải trên postback, xem xét rằng tôi đã không được truyền qua SSL. Nhưng dù sao, chuyển cookie. Đảm bảo thành sai, giải quyết được vấn đề và đã đọc cookie khi đăng lại.

Xin lỗi nếu điều này không liên quan gì đến vấn đề của bạn, tôi muốn chia sẻ điều này, vì tôi đã dành chút thời gian tìm cách giải quyết vấn đề này.

17

Câu trả lời rất có thể được nhìn thấy trên this post

Khi bạn cố gắng để kiểm tra sự tồn tại của một cookie sử dụng đối tượng đáp ứng chứ không phải Reqest, ASP.net tự động tạo một cookie.

Edit: Là một lưu ý, tôi đã kết thúc viết phần mềm cần thiết để kiểm tra sự tồn tại của cookie ASP.NET tạo ra một cơn ác mộng do API cookie của họ. Tôi đã kết thúc bằng văn bản một quá trình chuyển đổi mà có cookie từ yêu cầu và làm cho đối tượng nhà nước của tôi. Vào cuối yêu cầu, tôi dịch đối tượng trạng thái của tôi về các cookie và đưa chúng vào phản hồi (nếu cần). Điều này làm giảm bớt cố gắng tìm hiểu xem cookie có trong phản hồi hay không, để cập nhật chúng, thay vì tránh tạo cookie vô nghĩa, v.v.

+1

Tôi vừa làm sai lầm cơ sở này, sử dụng đối tượng Response để đọc cookie đã xóa sạch cookie của tôi! Đây là một sự giúp đỡ. Cảm ơn. – kstubs

1

Tôi nghĩ rằng tôi biết câu trả lời.

Chỉ XÓA thuộc tính hành động trong thẻ <form> của bạn.

làm cho nó trông như thế này: <form id="form1" runat="server">

thay vì điều này: <form id="form1" action="DisplayName.aspx" runat="server">

Sau đó, bạn nên sử dụng Response.Redirect("DisplayName.aspx"); trong mã của bạn.

0

có thêm này như là một bình luận cho câu trả lời Chris Marisic nhưng tôi không có mà privelage :-(

Tiếp tục với những gì Chris nói trong chỉnh sửa của mình về cách loại bỏ các tập tin cookie từ yêu cầu, để có thể đọc mới được tạo ra cookie giá trị trong một postback tôi đã kết thúc làm

Private Sub SetPageSize(ByVal pageSize As Integer) 

    ' Set cookie value to pageSize 
    Dim pageSizeCookie As HttpCookie = New HttpCookie(pageSizeCookieName) 
    With pageSizeCookie 
     .Expires = Now.AddYears(100) 
     .Value = pageSize.ToString 
    End With 

    ' Add to response to save it 
    Me.Response.Cookies.Add(pageSizeCookie) 

    ' Add to request so available for postback 
    Me.Request.Cookies.Remove(pageSizeCookieName) 
    Me.Request.Cookies.Add(pageSizeCookie) 

End Sub 

các Request.Cookies.Remove và Request.Cookies.Add dòng làm cho nó hoạt động trên postbacks

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