2016-04-10 23 views
1

Momentan konvertiere ich alle meine PHP-Unix-Zeitstempel zu arbeiten über 2k38 issue hinaus.PHP: setcookie() läuft nach dem Jahr 2038 ab

Ich bemerkte, dass setcookie()Ablaufdatum Parameter verwendet den Unix-Timestamp. Gibt es eine Möglichkeit, das Verfallsdatum mit einer alternativen Methode festzulegen, möglicherweise mit der DateTime-Klasse?

Von dem PHP-Dokument über Datum ablaufen:

Hinweis: Sie können die Parameter auf einem Unix-Zeitstempel nehmen ablaufen bemerken, auf das Datumsformat im Gegensatz WDY, DD-Mo-YYYY HH: MM: SS GMT, das ist , weil PHP diese Konvertierung intern durchführt.

+2

Ich glaube nicht. Die Frage ist, es ist wirklich ** jetzt ** ein Problem für dich? 2038 ist in 18 Jahren. Ich bin zu 100% überzeugt, dass Ihre Software _re_redritten und bis zu diesem Datum angepasst sein wird ... –

+0

Was ist falsch daran, dass 'setcookie' einen Unix-Zeitstempel nimmt? Es gibt nichts, was sie inhärent beschränkt, nur bis zum Jahr 2038 zu gehen. Wenn Sie 64-Bit-PHP haben, würde ich erwarten, einen Cookie-Ablauf nach 2038 zu setzen, wäre in Ordnung. – Chris

+2

Sie können die 'setcookie' -Funktion mit dem' header' implementieren, um sie selbst einzustellen - aber ich denke, dass Sie das Problem nicht richtig verstehen: Nach dem Jahr 2038 können wir noch den Unix-Timestamp verwenden. – Federkun

Antwort

5

Sie können die Funktionssignatur nicht ändern. Nun, nicht zuletzt, ohne an seltsamen PHP-Erweiterungen zu fummeln. Da aber die cookie spec nicht Unix nicht verwendet Zeitstempel überhaupt können Sie einfach Ihre eigene Funktion schreiben und rufen header() manuell:

Set-Cookie: lang=en-US; Expires=Wed, 09 Jun 2099 10:18:14 GMT 
Set-Cookie: lang=en-US; Max-Age=8640000 

... und hoffen, dass Browser in der Lage, das Datum zu verarbeiten:

Wenn die Ablaufzeit später ist als das letzte Datum, das der Benutzeragent darstellen kann, kann der Benutzeragent die Ablaufzeit durch das letzte darstellbare Datum ersetzen.

Oder Sie können einfach seecookie() trotzdem verwenden. Soweit ich weiß, wird es nur ein Problem in einigen 32-Bit-Versionen von PHP sein.

+1

Nur die Antwort, die ich gesucht habe. Vielen Dank. – evilReiko