Является ли установка времени истечения срока действия cookie: "time () - 3600", всегда правильной? - PullRequest
0 голосов
/ 23 июня 2019

для удаление cookie в PHP :

Я читал в Интернете и на слайде своего курса, что если мы установим дату истечения срока «time () - 3600», мы сможемНе будьте уверены, что cookie будет удален клиентом,

, потому что время клиента и время сервера могут отличаться.

Я согласен с последним утверждением, но почемуможет ли клиент не удалить куки, если функция time () возвращает значение эпохи?это не абсолютное значение?

Я думаю, что если мы установим time () - 3600, то для set-cookie заголовка ответа будет дата истечения срока действия в качестве абсолютного значения, и браузер сможет интерпретировать значение для поиска данных (как локальные данные клиента), когда срок действия файла cookie истек.

Я делаю это неправильно?

Ответы [ 2 ]

0 голосов
/ 24 июня 2019
  • time() возвращает количество секунд с полуночи UTC 1 января 1970 года, в соответствии с часами вашего сервера .
  • setcookie затем отформатирует это в формат строки, требуемый HTTP , который всегда выражается в GMT.
  • Клиент (браузер) затем проанализирует эту строку даты и сравнит ее с текущим временем в GMT в соответствии со своими часами .

Поэтому правильно настроенный сервер и клиент должны согласиться с тем, что значение, сгенерированное time() - 3600, уже в прошлом, поэтому файл cookie будет удален.

Однако есть ряд причин, по которым это может пойти не так:

  • Часы сервера сместились более чем на час вперед.
  • Неправильная конфигурация часового пояса сервера, так что time() неправильно корректирует местное время по времени UTC.
  • Часы клиента отстали более чем на час.
  • Неправильная конфигурация часового пояса клиента, поэтому сравнение с GMT неверно.

Стоит также отметить, что в целом вы не можете гарантировать , что клиент будет делать все, что вы захотите. Если вы хотите аннулировать сеанс по соображениям безопасности, вы должны сделать его недействительным на сервере и удалить cookie только для дополнительного удобства.

0 голосов
/ 24 июня 2019

Часы клиента могут значительно отличаться от реального времени.В этом случае не имеет значения, является ли time() абсолютным или нет, если клиентский компьютер имеет неправильное время, он может интерпретировать неверное абсолютное время и думать, что время истечения еще в будущем.

...