2008-10-16 3 views
14

У меня есть следующий код, который устанавливает куки:Cookie теряет ценность в 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); 

Однако, когда я пытаюсь прочитать куки, значение равно нулю. Файл cookie существует. Я никогда не пройду мимо, если проверка:

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

Помощь?

+0

Используйте LiveHTTPHeaders, чтобы увидеть ли печенье возвращается в браузер. http s: //addons.mozilla.org/en-US/firefox/addon/3829 – 2009-05-27 20:19:00

+0

Не забудьте принять ответ на вопрос – 2010-10-11 22:15:23

ответ

41

Проверка сделана после сообщения назад? Если это так, вы должны прочитать cookie из коллекции Request.

Куки сохраняются в браузере, добавляя их в Response.Cookies и считываются с Request.Cookies.

Файлы cookie, добавленные в Response, могут быть считаны, только если страница находится на одном запросе.

+0

Не знаете, почему Response.Cookies удаляет значения, но спасибо. Вы спасли меня много времени. – 2012-12-12 18:19:09

0

У вас есть устаревшая коллекция «Запрос» вместо коллекции «Ответ»?

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

использование Response.Cookies.Add (cookie); вместо Response.Cookies.Set (cookie);

0

Попробуйте этот фрагмент -

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

& читать его -

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

если вы собираете в режиме отладки, включите трассировку для страниц вопросов и убедитесь, что куки в коллекции запросов. Установите трассировку в директиве @page в файле aspx.

0

У меня была аналогичная проблема, я не мог прочитать куки на обратной передаче. Проблема для меня в том, что я проверил свойство Secure cookie на true. Говорят, что когда свойство Secure cookie включено, это приводит к передаче файла cookie только в том случае, если соединение использует Secure Sockets Layer. Однако я не уверен, как я впервые увидел куки-файл в браузере, но не на обратной передаче, учитывая, что я не передавал через SSL. Во всяком случае, превращая cookie.Secure в false, решил проблему, и куки были прочитаны после обратной передачи.

Извините, если вам не нужно что-либо делать с вашей проблемой, я хотел бы поделиться этим, потому что я потратил некоторое время на то, как решить эту проблему.

17

Наиболее вероятный ответ виден на this post

При попытке проверить наличие печенья с помощью объекта Response, а не Reqest, ASP.net автоматически создает куки.

Edit: Как примечание, я закончил писать программное обеспечение, которое необходимое, чтобы проверить наличие куки, которые ASP.NET делает кошмар из-за их печенья API. Я закончил писать процесс преобразования, который принимает файлы cookie из запроса и делает мой объект состояния. В конце запроса я затем перевежу свой объект состояния обратно в файлы cookie и добавлю их в ответ (при необходимости). Это облегчает попытку выяснить, есть ли файлы cookie в ответ, вместо этого обновить их, избегая создания бессмысленных файлов cookie и т. Д.

1

Я думаю, что знаю ответ.

Просто удалите атрибут действия в теге <form>.

сделать его выглядеть следующим образом: <form id="form1" runat="server">

вместо этого: <form id="form1" action="DisplayName.aspx" runat="server">

Затем вы должны использовать Response.Redirect("DisplayName.aspx"); в вашем коде.

0

добавить бы это как комментарий к ответу Криса Marisic, но у меня нет, что privelage :-(

Кроме того, что сказал в своем редактировать Крис об удалении куки с просьбой, чтобы иметь возможность читать вновь созданная стоимость печенья в постбэка я в конечном итоге делает

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 

The Request.Cookies.Remove и Request.Cookies.Add линий, что делает его работу на постбэков

Смежные вопросы