PHP: setcookie() истекает после 2038 года

В настоящее время я конвертирую все свои временные метки в Unix PHP, чтобы работать за пределами проблемы 2k38.

Я заметил, что параметр даты истечения setcookie() использует метку времени Unix. Есть ли способ установить дату истечения срока с помощью альтернативного метода, может быть, используя класс DateTime как-то?

Из документа PHP о дате истечения срока действия:

Примечание: Вы можете заметить, что параметр expire принимает метку времени Unix, в отличие от формата даты Wdy, DD-Mon-YYYY HH:MM:SS GMT, это происходит потому, что PHP выполняет это преобразование внутренне.

1 ответ

Решение

Вы не можете изменить сигнатуру функции. Ну, по крайней мере, без возни со странными расширениями PHP. Но поскольку спецификация cookie вообще не использует метки времени Unix, вы можете просто написать свою собственную функцию и вызвать header() вручную:

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

... и надеюсь, что браузеры смогут обработать дату:

Если время истечения больше, чем последняя дата, которую пользовательский агент может представить, пользовательский агент МОЖЕТ заменить время истечения на последнюю представляемую дату.

Или вы можете просто использовать seecookie() тем не мение. Насколько я знаю, это будет проблемой только в некоторых 32-битных версиях PHP.

Другие вопросы по тегам