gpt4 book ai didi

laravel - 机器人没有 Laravel session

转载 作者:IT王子 更新时间:2023-10-29 06:00:45 24 4
gpt4 key购买 nike

我在处理大型 Laravel 项目和 Redis 存储时遇到问题。我们将 session 存储在 Redis 中。我们那里已经有 28GB 的​​ RAM。然而,它仍然以相对快的速度运行到极限,因为我们有很多来自搜索引擎机器人的点击(每天超过 250,000 次)。

是否有任何优雅的方法可以完全禁用机器人 session ?我已经实现了自己的 session 中间件,如下所示:

<?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;
}

不幸的是,这似乎行不通。有人在这里有提示或经验吗?非常感谢!

最佳答案

这就是我自己解决这个问题的方法。

  1. 包含一个使用 composer 的机器人检测包。我用过这个:https://github.com/JayBizzle/Crawler-Detect

    composer 需要 jaybizzle/crawler-detect

  2. 创建一个新的中间件类

namespace App\Http\Middleware;class NoSessionForBotsMiddleware{    public function handle($request, \Closure $next)    {        if ((new \Jaybizzle\CrawlerDetect\CrawlerDetect)->isCrawler()) {            \Config::set('session.driver', 'array');        }        return $next($request);    }}
  1. Kernel 类中注册 session 中间件之前:
protected $middlewareGroups = [    'web' => [        // ..        NoSessionForBotsMiddleware::class,        StartSession::class,        // ..    ],    // ..];

关于laravel - 机器人没有 Laravel session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51176946/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com