shouldDraw($request)) { $arm = PriceExperiment::draw(); $request->cookies->set(PriceExperiment::COOKIE, $arm); Cookie::queue(PriceExperiment::COOKIE, $arm, minutes: 60 * 24 * 365); } return $next($request); } /** * Only anonymous visitors browsing a page are drawn: a signed-in user already * carries their arm on the user row. This middleware is in the web group, so * API traffic never reaches it. */ private function shouldDraw(Request $request): bool { return PriceExperiment::isRunning() && $request->user() === null && $request->isMethod('GET') && PriceExperiment::sanitize($request->cookie(PriceExperiment::COOKIE)) === null; } }