Set-Cookie: Expire Eigenschaft, Clock Skew und Internet Explorer Problem

8

Es gibt einen Header Max-Age, mit dem die Ablaufzeit eines Cookies festgelegt werden kann. Leider unterstützen Internet Explorer 6, 7, 8 und wahrscheinlich später Max-Age nicht und erfordern einen Expires-Header mit einem absoluten Datum in GMT.

Es ist nicht ungewöhnlich, dass GMT-Zeit und TZ-Einstellungen auf einem bestimmten Client nicht korrekt sind. Berücksichtigen Sie den Benutzer, der seine Zeitzone nicht korrekt definiert hat, und passen Sie die Uhr manuell an.

Darüber hinaus kann es manchmal zu einer signifikanten Taktverschiebung von vielen Minuten kommen, die der Benutzer nicht bemerkt.

In diesem Fall kann die GMT-Zeit um mehrere Stunden verschoben werden. Effektiv würde es verhindern, dass ein Server irgendeinen Cookie setzt, der eine kurze Ablaufzeit benötigt. Stellen Sie sich vor, ein Cookie mit einem maximalen Alter von 10 Minuten würde niemals gesetzt werden, wenn TZ falsch ist.

Ursprüngliche Ideen zur Lösung des Problems (die nicht funktionieren oder problematisch sind):

  1. Natürlich ist das Beste, Max-Age zu verwenden oder beides zu spezifizieren, da alle Browser den "Expire" -Teil ignorieren würden - aber es funktioniert nicht in IE
  2. Eine andere Art, an die ich dachte, ist Date: header zu setzen, hoffentlich würde der IE den Unterschied berechnen, um den Clock Skew zu umgehen ... Aber IE hilft nicht.
  3. Holen Sie sich die Zeit vom Client auf die Anfrage (mit JavaScript) und dann berechnen Sie die Uhr Differenz und dann anpassen Expire-Header nach Bedarf. Es erfordert jedoch komplexe Datenmanipulation einschließlich einiger Möglichkeiten, die Zeit an den Server zu übermitteln.

Fragen:

  1. Was ist die beste und gebräuchlichste Vorgehensweise um die Expire-Zeit für Cookies in IE zu bewältigen?
  2. Wie machen Sie das in Ihren Anwendungen?
Artyom 07.05.2013, 09:59
quelle

4 Antworten

8
  • Stellen Sie Max-Age so ein, wie jeder außer Microsoft es versteht.
  • Fügen Sie Javascript hinzu, das nur auf IE ausgeführt wird, um Max-Age in UTC gemäß der Uhr des Browsers zu konvertieren und diese Ablaufzeit auf dem Cookie festzulegen. Beachten Sie, dass JavaScript den Max-Age-Satz im Cookie nicht lesen kann. Daher müssen Sie diese Informationen (zusammen mit anderen Optionen) dem JavaScript auf andere Weise bereitstellen.

Von QuirksMode

%Vor%

Dann, nachdem Sie den Cookie name und maxAge und otherOptions (z. B. Pfad, Domäne) von irgendwo bekommen haben:

%Vor%     
Old Pro 12.05.2013 01:16
quelle
5

Was ich getan habe, war, die Zeit auf die Serverseite zu verlagern. Sie können sich der Zeit auf der Client-Seite nie sicher sein, aber Sie wissen, dass Ihr Server niemals lügt.

  • Sie behalten die Zeit, die die erste Anfrage auf dem Server passiert ist Serverzeit, wenn Sie Daten pro Client senden), und Sie setzen ein Cookie mit ein maximales Datumsablaufdatum, d. h .: 01.01.2900.
  • Sie behalten diese Zeit im Auge und sagen 10 Minuten Serverzeit Sie entscheiden seine Zeit, um es zu töten.
  • Dann setzen Sie den Cookie so, dass er das Mindestdatum hat. d.h. 01.01.1900. Löschen von Cookies:
    Ссылка
Geo A. Fragedakis 16.05.2013 09:37
quelle
2

Wenn ich diese Anforderung hätte, würde ich die Cookies in meiner Anwendung verwalten. Fügen Sie dem Inhalt des Cookies einen Server-Time-Verfalls-Timestamp hinzu, sichern Sie das Cookie mit Verschlüsselung oder einem Hash, und lehnen Sie das Cookie ab, wenn der Timestamp im Cookie abgelaufen ist.

Dies ist ungefähr so, wie der Ablauf der automatischen Anmeldung von Cookies erzwungen wird.

    
Sara 16.05.2013 07:13
quelle
0
___ answer16503269 ___
  • Stellen Sie Max-Age so ein, wie jeder außer Microsoft es versteht.
  • Fügen Sie Javascript hinzu, das nur auf IE ausgeführt wird, um Max-Age in UTC gemäß der Uhr des Browsers zu konvertieren und diese Ablaufzeit auf dem Cookie festzulegen. Beachten Sie, dass JavaScript den Max-Age-Satz im Cookie nicht lesen kann. Daher müssen Sie diese Informationen (zusammen mit anderen Optionen) dem JavaScript auf andere Weise bereitstellen.

Von QuirksMode

%Vor%

Dann, nachdem Sie den Cookie %code% und %code% und %code% (z. B. Pfad, Domäne) von irgendwo bekommen haben:

%Vor%     
___ answer16583894 ___

Was ich getan habe, war, die Zeit auf die Serverseite zu verlagern. Sie können sich der Zeit auf der Client-Seite nie sicher sein, aber Sie wissen, dass Ihr Server niemals lügt.

  • Sie behalten die Zeit, die die erste Anfrage auf dem Server passiert ist Serverzeit, wenn Sie Daten pro Client senden), und Sie setzen ein Cookie mit ein maximales Datumsablaufdatum, d. h .: 01.01.2900.
  • Sie behalten diese Zeit im Auge und sagen 10 Minuten Serverzeit Sie entscheiden seine Zeit, um es zu töten.
  • Dann setzen Sie den Cookie so, dass er das Mindestdatum hat. d.h. 01.01.1900. Löschen von Cookies:
    Ссылка
___ qstntxt ___

Es gibt einen Header Max-Age, mit dem die Ablaufzeit eines Cookies festgelegt werden kann. Leider unterstützen Internet Explorer 6, 7, 8 und wahrscheinlich später Max-Age nicht und erfordern einen Expires-Header mit einem absoluten Datum in GMT.

Es ist nicht ungewöhnlich, dass GMT-Zeit und TZ-Einstellungen auf einem bestimmten Client nicht korrekt sind. Berücksichtigen Sie den Benutzer, der seine Zeitzone nicht korrekt definiert hat, und passen Sie die Uhr manuell an.

Darüber hinaus kann es manchmal zu einer signifikanten Taktverschiebung von vielen Minuten kommen, die der Benutzer nicht bemerkt.

In diesem Fall kann die GMT-Zeit um mehrere Stunden verschoben werden. Effektiv würde es verhindern, dass ein Server irgendeinen Cookie setzt, der eine kurze Ablaufzeit benötigt. Stellen Sie sich vor, ein Cookie mit einem maximalen Alter von 10 Minuten würde niemals gesetzt werden, wenn TZ falsch ist.

Ursprüngliche Ideen zur Lösung des Problems (die nicht funktionieren oder problematisch sind):

  1. Natürlich ist das Beste, Max-Age zu verwenden oder beides zu spezifizieren, da alle Browser den "Expire" -Teil ignorieren würden - aber es funktioniert nicht in IE
  2. Eine andere Art, an die ich dachte, ist Date: header zu setzen, hoffentlich würde der IE den Unterschied berechnen, um den Clock Skew zu umgehen ... Aber IE hilft nicht.
  3. Holen Sie sich die Zeit vom Client auf die Anfrage (mit JavaScript) und dann berechnen Sie die Uhr Differenz und dann anpassen Expire-Header nach Bedarf. Es erfordert jedoch komplexe Datenmanipulation einschließlich einiger Möglichkeiten, die Zeit an den Server zu übermitteln.

Fragen:

  1. Was ist die beste und gebräuchlichste Vorgehensweise um die Expire-Zeit für Cookies in IE zu bewältigen?
  2. Wie machen Sie das in Ihren Anwendungen?
___ antwort43903354 ___

Nur FYI, IE 11 unterstützt Max-Age auf Cookies ab Version 11.0.15063.0.

Ich kann keine Dokumentation von Microsoft finden, um dies zu melden, aber während der Entwicklung stellten wir fest, dass unsere lokale Version von IE funktionierte, aber Kunden nicht. Wir haben es auf einen Unterschied in der IE-Version und der Max-Age-Eigenschaft auf Cookies beschränkt.

    
___ tag123internetexplorer ___ Internet Explorer (üblicherweise abgekürzt IE oder MSIE) ist ein von Microsoft entwickelter Webbrowser, der Teil von Microsoft Windows ist. ___ tag123http ___ Das Hypertext Transfer Protocol (HTTP) ist ein Netzwerkprotokoll auf Anwendungsebene, das für die Übertragung von Inhalten im World Wide Web verwendet wird. ___ tag123cookies ___ Ein HTTP-Cookie ist ein Teil der Daten, die vom Webbrowser des Benutzers gespeichert werden. Sofern nicht anders angegeben, können Cookies sowohl mit JavaScript als auch serverseitig über HTTP-Header erstellt, gelesen, geändert und gelöscht werden. ___ answer16581175 ___

Wenn ich diese Anforderung hätte, würde ich die Cookies in meiner Anwendung verwalten. Fügen Sie dem Inhalt des Cookies einen Server-Time-Verfalls-Timestamp hinzu, sichern Sie das Cookie mit Verschlüsselung oder einem Hash, und lehnen Sie das Cookie ab, wenn der Timestamp im Cookie abgelaufen ist.

Dies ist ungefähr so, wie der Ablauf der automatischen Anmeldung von Cookies erzwungen wird.

    
___ qstnhdr ___ Set-Cookie: Expire Eigenschaft, Clock Skew und Internet Explorer Problem ___
Daniel Gary 10.05.2017 21:57
quelle

Tags und Links