Sitemizde Redis de aşırı session olduğunu fark etdik aylık 500k tekil ziyaretçi alan sitenin session miktarı 10m ulaşmışdı sorunun Google ve Yandex botlardan kayaklandığını fark etik cookie saklamadıkları için her ziyaretde yeni session oluşuyordu.
Ben de küçük bir kod eklemesi yazarak sorunu çözdüm
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Support\Str;
class DisableBotSession
{
private static $bots = [
'Googlebot',
'YandexBot',
'YandexMobileBot'
];
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
if (Str::contains($request->userAgent(), static::$bots)) {
config()->set('session.driver', 'array');
}
return $next($request);
}
}
Session tamamen kapatmak yerine array olarak kullanmak daha güvenli olacağını düşündüm.
//App\Http/Kernel
protected $middlewareGroups = [
'web' => [
\App\Http\Middleware\DisableBotSession::class,
\App\Http\Middleware\EncryptCookies::class,
\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
\Illuminate\Session\Middleware\StartSession::class,
// \Illuminate\Session\Middleware\AuthenticateSession::class,
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
\App\Http\Middleware\VerifyCsrfToken::class,
\Illuminate\Routing\Middleware\SubstituteBindings::class,
]
dikkat etmeniz gereken StartSession dan yukarıda eklemek