Файлы сеанса Laravel не очищаются из папки framework/sessions

Я нахожусь на общем хосте (OVH pro), используя Laravel 5.2 в производстве (PHP 7.0.5).

Я использую драйвер файлового сеанса, и на моем предыдущем хосте (с тем же приложением) все работало нормально, но с тех пор, как я перешел на OVH, файлы сеанса продолжают создаваться и никогда не удаляются Сборка мусора PHP. Мне приходится вручную стирать файлы (в день создается более 5000 файлов).

Мой файл config/session.php настроен правильно:

'driver' => 'file',
'lifetime' => 120,
'lottery' => [2, 100],

И мои папки storage, storage/framework, storage/framework/sessions все установлены с разрешением 0755.

Я также переопределяю php.ini, помещая эти две строки вверху файла config/session.php.

ini_set('session.gc_probability', '5');
ini_set('session.gc_divisor', '100');

Судя по тому, что возвращает phpinfo(), он работает нормально: Информация о сеансах PHP

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

Изменить: Мои сеансы работают нормально, я имею в виду, что для каждого посетителя создается только один файл. Проблема только в том, что файлы сеанса не очищаются, даже с разрешением 777.


Даже когда я поставил лотерею сеанса Laravel на 100/100, файлы все равно не удаляются:

    /*
    |--------------------------------------------------------------------------
    | Session Sweeping Lottery
    |--------------------------------------------------------------------------
    |
    | Some session drivers must manually sweep their storage location to get
    | rid of old sessions from storage. Here are the chances that it will
    | happen on a given request. By default, the odds are 2 out of 100.
    |
    */

    'lottery' => [100, 100],

EDIT: особенности хостинга OVH: я использую мультисайты на OVH, и папки, содержащие каждый сайт, размещаются на маршруте моего хоста OVH, а не в папке www по умолчанию.

Я сделал это из соображений безопасности, потому что папка www общедоступна через mynickname.cluster005.ovh.net, и я не хочу, чтобы какой-либо из моих сайтов был общедоступен через

mynickname.cluster005.ovh.net/site1

mynickname.cluster005.ovh.net/site2...

(www\site1, www\site2...).

Вот я и подумал, что, может быть, только файлы, расположенные внутри папки www, доступны для записи, а не тот, что снаружи (в корне)? Это объяснило бы, пока мои файлы не удаляются. Сегодня вечером я проверю, удаляются ли файлы при помещении в www\site1\storage\sessions.


person Phmarc    schedule 05.05.2016    source источник
comment
попробуйте добавить это в метод выхода Session::flush();   -  person Achraf Khouadja    schedule 06.05.2016
comment
Это умно, но большинство людей просто покидают веб-сайты без выхода из системы, я бы просто сохранил дюжину файлов...   -  person Phmarc    schedule 06.05.2016
comment
Разве ты не можешь просто запланировать это тогда? Не лучшее решение, которое я знаю   -  person Achraf Khouadja    schedule 06.05.2016
comment
Планирование задания cron тоже было моим планом, но это моя вторая большая проблема ›‹ stackoverflow.com/questions/37061770/   -  person Phmarc    schedule 06.05.2016
comment
аа: я никогда не пользовался расписанием, поэтому не могу помочь, надеюсь, ты исправишь это   -  person Achraf Khouadja    schedule 06.05.2016
comment
Вы: 1. пытались изменить время жизни 2. проверяли дату последней модификации файлов сеанса, которые я пробовал локально, и у меня нет проблем: файлы удаляются. Я играл с параметрами lifetime и lottery и не столкнулся с проблемой. На OVH не пробовал, так как у меня там уже что-то установлено. Но я могу уделить минутку завтра, чтобы настроить новый сайт для проверки с той же конфигурацией, что и у вас. Это действительно похоже на проблему с правами доступа, но вы уже пробовали много конфигураций...   -  person Arcesilas    schedule 10.05.2016
comment
Я изменил 'expire_on_close' с false на true, и теперь кажется, что количество файлов сеанса уменьшается очень медленно (~ 2 файла меньше в час, всего 2000), но, по крайней мере, оно уменьшается, поэтому файлы действительно удаляются, что означает, что это в конце концов, это не проблема разрешения. Попробую еще поиграться с вариантами сеанса, пока не найду что-то подходящее. Но на данный момент кажется, что проблема решена, хотя я до сих пор не уверен, что ее вызвало.   -  person Phmarc    schedule 10.05.2016
comment
Это очень странно. Я также только что понял, что вы используете PHP 7, в то время как я все еще использую PHP 5.6, даже на моем общем хостинге OVH. В любом случае, теперь, когда вы можете запустить запланированную задачу, вы можете написать небольшую команду для удаления старых файлов сеанса, если хотите (посмотрев на метод Illuminate\Session\FileSessionHandler::gc()). Это не объясняет, почему это происходит, но помогает очистить файлы сеансов, давая вам время выяснить, почему файлы не удаляются сборщиком мусора.   -  person Arcesilas    schedule 10.05.2016


Ответы (3)


Там какой-то шаг, который вы можете найти, что проблема в первую очередь

  1. Убедитесь, что идентификатор сеанса зафиксирован на каждой странице (идентификатор эхо-сеанса)

если идентификатор сеанса менялся на каждой странице, вам необходимо проверить правильность настройки домена конфигурации сеанса.

если идентификатор сеанса не изменился, возможно, вам нужно изменить premision папки хранилища на 777.

Надеюсь, это поможет вам.

person 曉月桐生    schedule 06.05.2016
comment
Мои сеансы работают нормально, я имею в виду, что для каждого посетителя создается только один файл. Проблема только в том, что файлы сеанса не очищаются, даже с разрешением 777. - person Phmarc; 06.05.2016

Если вы используете haproxy, рассмотрите этот ответ:

Файлы сеанса могут быть созданы haproxy's http health checks.

  1. Проверьте журналы веб-доступа к фиксированному интервалу доступа.

111.11.111.1 - - [28/Jul/2016:10:40:30 -0400] 200 "GET / HTTP/1.0" 4 "-" "-" "-"

111.11.111.1 - - [28/Jul/2016:10:40:32 -0400] 200 "GET / HTTP/1.0" 4 "-" "-" "-"

111.11.111.1 - - [28/Jul/2016:10:40:34 -0400] 200 "GET / HTTP/1.0" 4 "-" "-" "-"

  1. Обновите option httpchk GET /, чтобы указать на некоторые routes, которые вы могли бы установить в качестве драйвера сеанса array на вашем haproxy.cfg.

  2. добавьте строку Config::set('session.driver', 'array');, чтобы отключить создание файлов сеанса.


Ссылка:

person marlo    schedule 28.07.2016

Перейдите к config/session и установите 'lifetime' => 120 или число не слишком большое, это сколько длится сеанс в минутах

person Obyno Pac    schedule 08.01.2020