[REDIS] 봇에 대한 Laravel 세션 없다
REDIS봇에 대한 Laravel 세션 없다
나는 큰 Laravel 프로젝트와 레디 스 저장에 문제가 있어요. 우리는 레디 스에서 우리의 세션을 저장합니다. 우리는 이미 RAM의 28기가바이트 있습니다. 우리는 검색 엔진 로봇에서 매우 많은 안타 (하루 이상 250000)을 가지고 있기 때문에 그러나, 여전히 상대적으로 빠른 한계로 실행됩니다.
로봇에 대한 완전히 비활성화 세션에 대한 우아한 방법이 있나요? 난 이미 다음과 같습니다 내 자신의 세션 미들웨어를 구현 한 :
<?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.나 자신이 해결 방법이다.
나 자신이 해결 방법이다.
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); } }
protected $middlewareGroups = [ 'web' => [ // .. NoSessionForBotsMiddleware::class, StartSession::class, // .. ], // .. ];
-
==============================
2.올바르게 로봇을 식별하지 않는 것을하면 해당의 코드를 제공하기 위해 도움이 될 것입니다 귀하의 문제가 될 수 있습니다.
올바르게 로봇을 식별하지 않는 것을하면 해당의 코드를 제공하기 위해 도움이 될 것입니다 귀하의 문제가 될 수 있습니다.
비활성화 세션, 당신은 훨씬 더 세션을 유지하지 않는 드라이버로 배열 드라이버 세션 드라이버를 변경 떨어져 걸 미들웨어를 작성하는 대신 런타임에 실제 세션 드라이버의 구성을 변경하는 구체적인.
<?php namespace App\Http\Middleware; use App\Custom\System\Visitor; use Illuminate\Support\Facades\Config; class DiscardSessionIfBot { /** * Handle an incoming request. * * @param \Illuminate\Http\Request $request * @param \Closure $next * @return mixed */ public function handle($request, Closure $next) { if (Visitor::isBot()) { Config::set('session.driver', 'array'); } return $next($request); } }
from https://stackoverflow.com/questions/51176946/no-laravel-sessions-for-bots by cc-by-sa and MIT license
'REDIS' 카테고리의 다른 글
[REDIS] SET 수행 초과 키 {} 이달 0, MGR : 활성 큐 2는 숨어 1 QS = 1, QC = 0, WR = 1 / 1 년 = 0 / 0 = (0) | 2020.01.17 |
---|---|
[REDIS] 하나의 레디 스 인스턴스는 스레드로부터 안전하지 않습니다 이유는 무엇입니까? (0) | 2020.01.17 |
[REDIS] 파이썬 / PIL을 사용하여 레디 스에 이미지를 저장하는 방법 (0) | 2020.01.17 |
[REDIS] xargs를 변수에 나오지도 사용 쉘 확장 내부에서 작동하지 않습니다 (0) | 2020.01.17 |
[REDIS] 선택, epoll에, kqueue, 그리고 evport 사이의 근본적인 차이점은 무엇입니까? (0) | 2020.01.17 |