У меня проблемы с большим проектом Laravel и хранилищем Redis. Мы храним наши сессии в Redis. У нас уже есть 28 ГБ оперативной памяти. Тем не менее, он все еще работает относительно быстро до предела, потому что у нас очень много обращений (более 250 000 в день) с поисковых роботов.
Есть ли какой-нибудь элегантный способ полностью отключить сеансы для ботов? Я уже реализовал свое собственное промежуточное программное обеспечение сеанса, которое выглядит так:
<?php
namespace App\Http\Middleware;
use App\Custom\System\Visitor;
class StartSession extends \Illuminate\Session\Middleware\StartSession
{
protected function getSessionLifetimeInSeconds()
{
if(Visitor::isBot()) {
return 1;
}
return ($this->manager->getSessionConfig()['lifetime'] ?? null) * 60;
}
protected function sessionIsPersistent(array $config = null)
{
if(Visitor::isBot()) {
return false;
}
$config = $config ?: $this->manager->getSessionConfig();
return ! in_array($config['driver'], [null, 'array']);
}
}
Это моя функция для обнаружения ботов:
public static function isBot()
{
$exceptUserAgents = [
'Googlebot',
'Bingbot',
'Yahoo! Slurp',
'DuckDuckBot',
'Baiduspider',
'YandexBot',
'Sogou',
'facebot',
'ia_archiver',
];
if(!request()->header('User-Agent') || !str_contains(request()->header('User-Agent'), $exceptUserAgents)) {
return false;
}
return true;
}
К сожалению, это не похоже на работу. У кого-нибудь есть совет или опыт здесь? Большое спасибо!