我在Bluehost上托管了一个Laravel 4.2应用程序,并且我试图弄清楚为什么MySql会话表永远不会被清除。我曾尝试增加彩票,但仍然没有喜悦。有任何想法吗?

以下是相关的session.php设置:

'driver' => 'database',
'lifetime' => 180,
'expire_on_close' => true,
'lottery' => array(2, 100)

最佳答案

在每个请求中,Laravel使用会话lottery值生成一个随机数,该随机数将确定它是否将运行会话垃圾回收。它使用的确切代码是:

mt_rand(1, $config['lottery'][1]) <= $config['lottery'][0];


如果是这样,则将运行垃圾收集并检查是否有较旧的条目,然后lifetime设置。

使用默认设置,这意味着mt_rand(1, 100) <= 2必须为true,这将平均每50个请求运行一次垃圾收集器。因此,仅将lottery设置为(20, 100)仍将要求应用程序在触发垃圾收集器之前获得一些请求。

如果要清除表中的旧会话,只需将lottery值设置为(100, 100)(或任意两个相等的值)并刷新应用程序。

09-16 03:38