Файл данных сеанса, неожиданно удаленный до сессий.gc_maxlifetime и session.cookie_lifetime - PullRequest
0 голосов
/ 11 ноября 2019

При Ubuntu 18.04.3 при использовании PHP v5.6.40 файлы данных активного и не истекшего сеанса удаляются (я полагаю) сборкой мусора PHP и / или системным заданием cron /etc/cron.d/php, которое содержит следующее:

09,39 *     * * *     root   [ -x /usr/lib/php/sessionclean ] && if [ ! -d /run/systemd/system ]; then /usr/lib/php/sessionclean; fi

Насколько я понял / предположил, что файл данных активного и не истекшего сеанса не может быть удален ни одной из этих систем сбора мусора. Итак, почему мои активные файлы данных сеанса удаляются?

Вот мои соответствующие php.ini значения:

  • session.cookie_lifetime = 0
  • session.cookie_path= /
  • session.gc_divisor = 1000
  • session.gc_maxlifetime = 1440
  • session.gc_probability = 1
  • session.name = PHPSESSID
  • session.save_path = / var / lib / php / session
  • session.use_cookies = 1
  • session.use_only_cookies = 1
  • session.use_strict_mode = 1 (время выполнения,config все еще 0)

Вот некоторые подробности об одном файле данных сеанса, который я тестировал (PHPSESSID = 653rd0gbeob59b35dc9jve71r4)

  • CreationTime = "Пн, 11 ноября2019 04:00:17 GMT "
  • Expires =" Session "
  • LastAccessed =" Пн, 11 ноября 2019 06:05:47 GMT "
  • Path =" /"
  • SameSite = Unset
  • Secure = false

Чтобы увидеть, что происходит с файлом данных сеанса, я ввел команду:

sudo inotifywait -m -e modify,attrib,moved_to,moved_from,move,move_self,create,delete,delete_self --format '%:e %f %T' --timefmt '%H:%M' /var/lib/php/sessions/

... и следующие результаты отображаются за определенный период времени (PDT).

CREATE sess_653rd0gbeob59b35dc9jve71r4 23:00
MODIFY sess_653rd0gbeob59b35dc9jve71r4 23:00
MODIFY sess_653rd0gbeob59b35dc9jve71r4 23:00
MODIFY sess_653rd0gbeob59b35dc9jve71r4 23:01
MODIFY sess_653rd0gbeob59b35dc9jve71r4 23:02
MODIFY sess_653rd0gbeob59b35dc9jve71r4 23:10
MODIFY sess_653rd0gbeob59b35dc9jve71r4 23:15
MODIFY sess_653rd0gbeob59b35dc9jve71r4 23:15
DELETE sess_653rd0gbeob59b35dc9jve71r4 23:17

В каталоге не было других файлов. Вышеупомянутый файл данных сеанса был CREATE ed, когда мой PHP-скрипт выполнил session_start () в 23:00. Каждое из действий MODIFY происходило, когда я обновлял веб-страницу или нажимал на пункт меню. Я ожидал / надеялся, что каждый MODIFY перезапустит таймер сеанса и увеличит продолжительность текущего сеанса и cookie еще на 1440 секунд (например, 23:15 + 1440 секунд = 23:39). Однако по неизвестной причине DELETE произошло в 23:17. Я не вышел из системы, или F5, или что-то отличное от того, что я сделал во время действий MODIFY, которые я сделал.

Почему файл данных сеанса DELETE в 23:17 вместо 23:39? Это был cronjob или сборщик мусора PHP? Если файл данных сеанса активен и используется, то почему он все еще может быть удален, не должен ли он быть заблокирован во время использования?

Кроме того, в предыдущем тесте с другим файлом данных сеанса онбыл удален в то время, которое совпадает с cronjob (это произошло в ??: 30), но это был только один экземпляр.

Я читал во многих других сообщениях, что есть лучшие альтернативы для управления сессиями, ноЯ хотел бы разобраться и обойти эту проблему, прежде чем обойти ее и выбрать один из лучших вариантов, упомянутых в других статьях.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...