Frage

Ich habe den folgenden Code, die ein Cookie setzt:

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

Allerdings, wenn ich versuche, das Cookie zu lesen, ist der Wert Null. Das Cookie vorhanden ist. Ich bekomme nie über die folgenden, wenn Prüfung:

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

Hilfe?

War es hilfreich?

Lösung

Die Prüfung erfolgt nach einer Post zurück getan? Wenn dem so ist, sollten Sie das Cookie von dem Antrag Sammlung lesen statt.

Die Cookies werden an den Browser beibehalten, indem sie zu Response.Cookies Hinzufügen und zurück von Request.Cookies lesen.

Die Cookies Antwort hinzugefügt wurden, können nur gelesen werden, wenn die Seite auf der gleichen Anforderung ist.

Andere Tipps

Die wahrscheinlichste Antwort auf diesen Beitrag

  

Wenn Sie versuchen Existenz eines Cookies mit Response-Objekt zu überprüfen, anstatt REQEST, ASP.net erstellt automatisch ein Cookie.

Edit: Als Hinweis, endete ich mit dem Schreiben Software-up, die die Existenz von Cookies zu überprüfen, benötigt, die ASP.NET einen Albtraum wegen ihres Cookie-API macht. Ich landete einen Umwandlungsprozess zu schreiben, die Cookies von der Anfrage nimmt und meinen Zustand Objekt. Am Ende des Ersuchens übersetze ich dann meinen Zustand Objekt zurück zu Cookies und stopfe sie in der Antwort (falls erforderlich). Dies gelindert, um herauszufinden, ob Cookies in der Antwort ist, sie stattdessen zu aktualisieren, die Schaffung von sinnlose Cookies zu vermeiden etc.

Haben Sie müde "Request" Sammlung statt "Response" Sammlung?

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

Ich glaube, ich kenne die Antwort.

entfernen Sie einfach das action-Attribut in Ihrem <form>-Tag.

es so aussehen, wie folgt aus: <form id="form1" runat="server">

anstelle dieses: <form id="form1" action="DisplayName.aspx" runat="server">

Sie sollten dann Response.Redirect("DisplayName.aspx"); in Ihrem Code verwenden.

Wenn Sie im Debug-Modus kompilieren, schalten Sie für die Seiten in Frage Verfolgung und stellen Sie sicher, das Cookie in der Anfrage Kollektion. Stellen Sie Spur in der @ Page-Direktive in der ASPX-Datei.

Versuchen Sie, diesen Schnipsel -

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

& es zu lesen -

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

Ich hatte ein ähnliches Problem, ich nicht Cookies auf Postbacks lesen konnte. Das Problem für mich war, dass ich die sichere Eigenschaft des Cookies auf true geprüft. Es wird gesagt, dass, wenn die sichere Eigenschaft des Cookies eingeschaltet ist, ist es das Cookie bewirkt nur dann übertragen werden, wenn die Verbindung der Secure Sockets Layer verwendet. Ich bin nicht sicher, aber, wie ich in der Lage war das erste Mal, das Cookie im Browser zu sehen, aber nicht auf Postbacks, wenn man bedenkt, dass ich nicht SSL-Übertragung über. Wie auch immer, die cookie.Secure zu falschem Drehen, löste das Problem, und hatte Cookies auf Postbacks lesen.

Sorry, wenn dies nichts mit dem Thema zu tun hat, wollte ich dies teilen, weil ich einige Zeit auf der Suche ausgegeben, wie diese zu lösen.

Möchten fügen Sie diese als Kommentar zu Chris Marisic Antwort, aber ich habe nicht das privelage: - (

Weitere, was Chris sagte in seiner bearbeiten über Cookies aus der Anfrage entfernen zu können, die neu erstellte Cookies Wert in einem Postback lesen ich tun endete

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

Die Request.Cookies.Remove und Request.Cookies.Add Linien machen es auf Postbacks Arbeit

verwenden Response.Cookies.Add (Cookie); statt Response.Cookies.Set (Cookie);

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top