При 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), но это был только один экземпляр.
Я читал во многих других сообщениях, что есть лучшие альтернативы для управления сессиями, ноЯ хотел бы разобраться и обойти эту проблему, прежде чем обойти ее и выбрать один из лучших вариантов, упомянутых в других статьях.