【发布时间】:2016-08-31 22:08:47
【问题描述】:
我在使用 Laravel 5.2 生产环境 (PHP 7.0.5) 的共享主机 (OVH pro)。
我正在使用 文件会话驱动程序,并且在我以前的主机上一切正常(使用相同的应用程序),但是自从我移至 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');
我联系了我的主机,但他们告诉我这一定与我的 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],
编辑: 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的文件是否被删除。
【问题讨论】:
-
尝试在注销方法Session::flush()中添加这个;
-
这很聪明,但大多数人只是离开网站而不注销,我只会保存一打文件......
-
你不能安排那个吗?不是我知道的最好的解决方案
-
安排一个 cron 作业也是我的计划,但这是我的第二个大问题 >stackoverflow.com/questions/37061770/…
-
啊:我从来没有使用过调度,所以我帮不上忙,我希望你能解决这个问题