有人可以解释会议席卷抽奖的内容吗?我已经附加了Laravel框架的默认会话配置文件。
问题:1。它说某些会话驱动程序必须手动扫描它们 存储位置。有人可以描述这个过程及其原因 必要?哪些会话驱动程序需要此操作? 2.为什么需要彩票?如果说某种形式的存储(数据库) 已满,为什么它必须是随机的?为什么不能构建框架 当检测到驱动程序已满时扫描旧会话?
/*
|--------------------------------------------------------------------------
| 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' => array(2, 100),
答案 0 :(得分:5)
因此,会话是存储在服务器上一段时间的一段数据。
想象一下,使用带文件的文件夹来存储会话。必须有一个旧会议应该被清除的时刻。由于无法每隔x小时自动检查文件,因此会在某些请求中检查会话文件。
此设置是此检查发生的可能性。在这种情况下,每个请求中有2个为100个。
我认为目前唯一需要的会话驱动程序是数据库驱动程序。
如果您在存储空间已满时扫描存储空间,则新会话有可能无法启动,直到存储空间被清空。
如果你在每次请求时扫描存储,你的所有请求都会变得很慢。
答案 1 :(得分:0)
我完全同意 Jerodev 的回答。
对于现在正在寻找此功能的任何人,从 Laravel 8 开始,以下是以下方法:
\vendor\laravel\framework\src\Illuminate\Session\Middleware\StartSession.php:
/**
* Remove the garbage from the session if necessary.
*
* @param \Illuminate\Contracts\Session\Session $session
* @return void
*/
protected function collectGarbage(Session $session)
{
$config = $this->manager->getSessionConfig();
// Here we will see if this request hits the garbage collection lottery by hitting
// the odds needed to perform garbage collection on any given request. If we do
// hit it, we'll call this handler to let it delete all the expired sessions.
if ($this->configHitsLottery($config)) {
$session->getHandler()->gc($this->getSessionLifetimeInSeconds());
}
}
/**
* Determine if the configuration odds hit the lottery.
*
* @param array $config
* @return bool
*/
protected function configHitsLottery(array $config)
{
return random_int(1, $config['lottery'][1]) <= $config['lottery'][0];
}
config/session.php 中的默认值为 [2, 100]。
因此 configHitsLottery() 会计算 1 到 100 之间的 random integer 并将其与 2 进行比较,如下所示:
return random_int(1, 100) <= 2;