Pergunta

Eu tenho o seguinte código que define um cookie:

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

No entanto, quando tento ler o cookie, o valor é nulo. o cookie existe. Eu nunca ter passado o seguinte, se verificar:

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

Ajuda?

Foi útil?

Solução

A verificação é feita depois de um posto de volta? Se assim for, você deve ler o cookie da coleção Request vez.

Os biscoitos são persistentes para o navegador, adicionando-os Response.Cookies e são lidos de volta de Request.Cookies.

Os biscoitos adicionados a resposta pode ser lido somente se a página está no mesmo pedido.

Outras dicas

A resposta mais provável é visto na este post

Quando você tenta verificar a existência de um usando o objeto de resposta de cookie em vez de Reqest, ASP.net cria automaticamente um cookie.

Editar: Como uma nota, acabei escrevendo software que precisava para verificar a existência de cookies que ASP.NET faz um pesadelo devido à sua API cookie. Acabei escrevendo um processo de conversão que leva os cookies do pedido e faz o meu objeto de estado. No final do pedido I, em seguida, traduzir o meu objeto de estado de volta para biscoitos e enchê-los na resposta (se necessário). Isso aliviou tentando descobrir se os cookies estiverem na resposta, para atualizá-los em vez disso, evitando a criação de cookies inúteis etc.

Você já cansado coleção "Request" em vez de coleta de "Resposta"?

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

Eu acho que sei a resposta.

Apenas remover o atributo de ação em sua tag <form>.

torná-lo parecido com este: <form id="form1" runat="server">

em vez disso: <form id="form1" action="DisplayName.aspx" runat="server">

Você deve então usar Response.Redirect("DisplayName.aspx"); em seu código.

Se você está compilando no modo de depuração, ative o rastreio para as páginas em questão e certifique-se o cookie está na coleção pedido. Set traço na directiva @page no arquivo aspx.

Tente esse trecho -

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

& lê-lo -

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

Eu tive um problema semelhante, eu não conseguia ler cookies no postback. O problema para mim foi que eu verificado a propriedade segura do cookie para true. Diz-se que quando a propriedade segura do cookie é ligado, ele faz com que o cookie para ser transmitido somente se a conexão usa o Secure Sockets Layer. Não estou certo, no entanto, como eu era capaz de ver o cookie no navegador pela primeira vez, mas não em postback, considerando que eu não estava transmitindo através de SSL. De qualquer forma, transformando o cookie.Secure como falsa, resolveu o problema, e teve biscoitos ler no postback.

Desculpe se isso não tem que fazer qualquer coisa com seu problema, eu queria compartilhar isso, porque eu passei algum tempo a olhar como resolver isso.

gostaria de acrescentar isso como um comentário à resposta de Chris Marisic mas eu não tenho que privelage: - (

Na sequência do que Chris disse em sua edição sobre a remoção de cookies do pedido, para ser capaz de ler o valor biscoitos recém-criado em um postback eu acabei fazendo

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

As linhas Request.Cookies.Remove e Request.Cookies.Add fazê-lo funcionar em postbacks

uso Response.Cookies.Add (cookie); em vez de Response.Cookies.Set (cookie);

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top