Я нахожусь на общем хосте (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 , разместив эти 2 строки в верхней части config/session.php
ini_set('session.gc_probability', '5'); ini_set('session.gc_divisor', '100');
Кажется, что он отлично работает с тем, что возвращает phpinfo()
:
Я связался с моим хозяином, но они сказали мне, что это должно быть связано с моим приложением 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: я использую multisites в 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
.
Там есть какой-то шаг, который вы можете найти, в чем проблема.
если идентификатор сеанса был изменен на каждой странице, вам необходимо проверить правильность настройки домена конфигурации сеанса.
если идентификатор сеанса не изменился, возможно, вам необходимо изменить папку хранения данных на 777.
Надеюсь, это поможет вам.
Если вы используете haproxy
, рассмотрите этот ответ:
Файлы сеанса могут быть созданы с помощью haproxy's http health checks
.
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 "-" "-" "-"
Обновите option httpchk GET /
чтобы указать на некоторые routes
которые вы могли бы установить для драйвера сеанса как array
на вашем haproxy.cfg
.
добавьте Config::set('session.driver', 'array');
чтобы отключить создание файлов сеанса.
Справка: