我在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)
(或任意两个相等的值)并刷新应用程序。