2

我在使用 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.iniconfig/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],

编辑: 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

4

3 回答 3

0

有一些步骤,您可以首先找到问题所在

  1. 确保每个页面中的会话 ID 都是固定的(回显会话 ID)

如果每页都更改了会话 ID,则需要检查会话配置域设置是否正确。

如果会话 id 没有改变,你可能需要将存储文件夹前提更改为 777。

我希望这可以帮助你。

于 2016-05-06T01:47:27.537 回答
0

转到config/session并设置'lifetime' => 120,或者一个不太大的数字,这是会话持续的时间,以分钟为单位

于 2020-01-08T12:31:04.997 回答
0

如果您正在使用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');行以禁用会话文件的创建。


参考:

于 2016-07-28T14:52:08.480 回答