Ich habe ein Problem mit persistenten Cookies in Internet Explorer, das heißt, ich kann die Cookies setzen, aber sie können nicht bestehen bleiben. Ich benutze den Internet Explorer 11 und habe "Internetoptionen" -> "Erweitert" -> "Zurücksetzen" versucht, aber es hat nicht geholfen.Dauerhaftes Cookie funktioniert nicht im Internet Explorer
ich diesen Test-Code geschrieben haben:
class Program {
public static void Main(string[] args) {
HttpListener listener = new HttpListener();
listener.Prefixes.Add("http://+:7777/");
listener.Start();
ThreadPool.QueueUserWorkItem((o) = > {
while (listener.IsListening) {
ThreadPool.QueueUserWorkItem((c) = > {
HandleRequest(c as HttpListenerContext);
}, listener.GetContext());
}
});
Console.Write("Press any key to quit . . . ");
Console.ReadKey(true);
listener.Stop();
listener.Close();
}
static void HandleRequest(HttpListenerContext ctx) {
var cookie = ctx.Request.Cookies["TestCookie"];
if (cookie == null) {
Console.WriteLine("Setting cookie...");
var expiryDate = DateTime.UtcNow.AddDays(360);
ctx.Response.Headers["Set-Cookie"] = "TestCookie=some_value; Path=/; Expires=" + expiryDate.ToString("ddd, dd-MMM-yyyy H:mm:ss") + " GMT; HttpOnly";
} else {
Console.WriteLine("Cookie: " + cookie);
}
ReturnString(ctx, "OK");
}
protected static void ReturnString(HttpListenerContext ctx, String s) {
try {
byte[] buf = Encoding.UTF8.GetBytes(s);
ctx.Response.ContentLength64 = buf.Length;
ctx.Response.OutputStream.Write(buf, 0, buf.Length);
} catch (Exception e) {
} // suppress any exceptions
finally {
// always close the stream
ctx.Response.OutputStream.Close();
}
}
}
Nun, wenn 127.0.0.1:7777
Zugriff ich zum ersten Mal bekommen "Einstellen Cookie", und dann "Cookie: Testcookie = some_value" auf allen weiteren Anfragen. In Chrome ist das Cookie dauerhaft (ich kann den Browser schließen, neu starten und bekomme immer noch "Cookie: TestCookie = some_value"), aber das funktioniert nicht in Internet Explorer. Das heißt, wenn ich IE benutze, erhalte ich bei jedem Neustart des Browsers den "Setting Cookie" bei der ersten Anfrage. Der Cookie ist also eindeutig nicht mehr da.
Warum ist das? Mache ich etwas falsch? Sicherlich muss es eine Möglichkeit geben, dauerhafte Cookies im IE mit einem C# -Server zu setzen?
Nun, ich kann auf "Sicherheit" gehen -> "Webseite Datenschutz" -> Klick auf "127.0.0.1" -> "Zusammenfassung" und wählen Sie "Diese Seite immer erlauben, Cookies zu verwenden". Das löst das Problem, aber ich glaube nicht, dass ich regelmäßige Benutzer dazu zwingen kann. Also ich suche nach einer Möglichkeit, dies mit IE-Standardeinstellungen arbeiten zu lassen. –
Das ist in Ordnung. War nur versucht, das Szenario zu etablieren. In Bezug auf die mögliche Blockierung liegt es wahrscheinlich daran, dass es sich bei dem Cookie möglicherweise um ein Drittanbieter-Cookie handelt (Sie würden dies beispielsweise sehen, wenn Sie das Cookie auf "localhost" setzen, dann aber zu 127.0.0.1), wenn es innerhalb eines Iframes gesetzt wird, oder wenn die Daten im Cookie Informationen enthalten, von denen IE glaubt, dass sie für die Kontaktaufnahme mit Ihnen verwendet werden könnten (z. B. E-Mail-Adresse). Bei IE lohnt es sich oft, einen P3P-Header einzufügen, der dem IE sagt, dass Ihre Site nicht völlig unsicher ist (https://en.wikipedia.org/wiki/P3P). Hast du P3P ausprobiert? –
Ich habe immer 127.0.0.1, niemals localhost in meinem Szenario verwendet. Und keine Frames. Die Daten sind eine Base64-codierte Zeichenfolge, die keiner E-Mail-Adresse ähnelt. Ich habe P3P ausprobiert, aber ich habe noch nicht genug Zeit investiert, um es richtig zu verstehen, also habe ich gerade ein paar P3P-Sachen aufgenommen, die ich beim Googlen gefunden habe. –