当前位置: 首页 > 面试题库 >

没有机器人的Laravel会议

司马萧迟
2023-03-14
问题内容

我在Laravel大项目和Redis存储方面遇到问题。我们将会话存储在Redis中。我们已经有28GB的RAM。但是,它仍然可以相对快地运行到极限,因为我们有很多来自搜索引擎机器人的点击(每天超过25万次)。

有什么优雅的方法可以完全禁用机器人的会话?我已经实现了自己的会话中间件,如下所示:

    <?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 require jaybizzle/crawler-detect

  1. 创建一个新的中间件类
    命名空间App \ Http \ Middleware;

    ClassNoSessionForBotsMiddleware
    {
        公共功能句柄($ request,\ Closure $ next)
        {
            如果((新\ Jaybizzle \ CrawlerDetect \ CrawlerDetect)-> isCrawler()){
                \ Config :: set('session.driver','array');
            }

            返回$ next($ request);
        }
    }
  1. 在类中的会话中间件 之前 注册中间件Kernel
    受保护的$ middlewareGroups = [
        'web'=> [
            // ..
            NoSessionForBotsMiddleware :: class,
            StartSession :: class,
            // ..
        ],
        // ..
    ];


 类似资料:
  • 我试图做一个程序来创建一个无尽的循环,例如: 但是主要的问题是一个机器人听不到另一个机器人的声音,所以这不起作用。。。 有没有办法让机器人听另一个机器人的?提前感谢!:)

  • 我想知道公会成员何时登录,而不是成员何时加入,所以在这种情况下不起作用。也许有另一种方法来实现我想做的事情,所以我将在这里解释。 当我的网站的用户升级到标准或专业会员时,他们可以加入我的discord服务器。我仍然需要弄清楚如何确定discord用户是我网站上的标准/专业订阅会员,但我认为我可以发送一个一次性邀请链接或一个会员必须输入的密码,在机器人发送欢迎消息询问密码或其他信息后发送discor

  • 概述 PDF版下载 机器人是企业群的高级扩展功能,所有的Hi企业用户均可在企业群中添加使用机器人功能。 企业可以通过机器人推送消息到群聊,也可以通过机器人接收用户的消息,拥有用户和机器人对话的能力。 机器人类型 自定义机器人:由企业开发实现的机器人,一般用来发送企业通知,也可以利用ai会话技术实现有趣的功能。 企业机器人:目前开放的定时通知、投票、问卷机器人由如流开发,企业管理员在企业管理后台的「

  • 我使用repl。它让我的不和机器人。我使用Python并遵循本教程: https://www.youtube.com/watch?v=SPTfmiYiuok 这是我的代码:

  • 使用说明 使用前必须先在群组里面添加机器人,然后将 Webhook 地址 中的 key 取出来,作为示例中 $groupKey 的值。 Webhook 地址示例:https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=`ab4f609a-3feb-427c-ae9d-b319ca712d36` 微信文档:https://work.weixin.qq