diff --git a/src/Laravel/EventListener/OctaneListener.php b/src/Laravel/EventListener/OctaneListener.php index fd4e0d8b..08992e92 100644 --- a/src/Laravel/EventListener/OctaneListener.php +++ b/src/Laravel/EventListener/OctaneListener.php @@ -4,6 +4,7 @@ declare(strict_types=1); namespace Flasher\Laravel\EventListener; +use Flasher\Laravel\Storage\FallbackSession; use Flasher\Prime\EventDispatcher\EventListener\NotificationLoggerListener; use Laravel\Octane\Events\RequestReceived; @@ -11,8 +12,13 @@ final readonly class OctaneListener { public function __invoke(RequestReceived $event): void { + // Reset the notification logger to prevent state leakage between requests /** @var NotificationLoggerListener $listener */ $listener = $event->sandbox->make('flasher.notification_logger_listener'); $listener->reset(); + + // Reset the fallback session static storage to prevent notification leakage + // when session is not started (e.g., during API requests) + FallbackSession::reset(); } } diff --git a/src/Symfony/EventListener/WorkerListener.php b/src/Symfony/EventListener/WorkerListener.php new file mode 100644 index 00000000..e980582f --- /dev/null +++ b/src/Symfony/EventListener/WorkerListener.php @@ -0,0 +1,23 @@ +tag('flasher.event_listener') ->tag('kernel.reset', ['method' => 'reset']) + ->set('flasher.worker_listener', WorkerListener::class) + ->tag('kernel.reset', ['method' => 'reset']) + ->set('flasher.translation_listener', TranslationListener::class) ->args([service('flasher.translator')->nullOnInvalid()]) ->tag('flasher.event_listener') diff --git a/src/Symfony/Storage/FallbackSession.php b/src/Symfony/Storage/FallbackSession.php index 5ac8af62..93ba8566 100644 --- a/src/Symfony/Storage/FallbackSession.php +++ b/src/Symfony/Storage/FallbackSession.php @@ -18,4 +18,13 @@ final class FallbackSession implements FallbackSessionInterface { self::$storage[$name] = $value; } + + /** + * Reset the static storage to prevent state leakage between requests + * in long-running processes (e.g., FrankenPHP, Swoole). + */ + public static function reset(): void + { + self::$storage = []; + } }