admin管理员组文章数量:1334931
Laravel 11: Can't Get Both Normal Sessions and Flash Messages Working Simultaneously
Problem
I'm experiencing a conflict in Laravel 11 where I can only get either normal sessions OR flash messages to work, but not both:
- When middleware is commented out: Flash messages work, but normal sessions don't persist
- When middleware is uncommented: Normal sessions work, but flash messages disappear after redirect
Code
Controller:
public function switchLang(Request $request, $locale)
{
$request->session()->put('locale', $locale); // Normal session
return redirect()
->back()
->with('flash_message', '语言更换成功.') // Flash message
->with('flash_type', 'success');
}
View:
{{-- Flash Message --}}
@if(session('flash_message'))
<div class="alert alert-{{ session('flash_type', 'info') }}">
{{ session('flash_message') }}
</div>
@endif
{{-- Normal Session --}}
{{ session('locale') }}
app.php Configuration that makes flash work but breaks normal sessions:
return Application::configure(basePath: dirname(__DIR__))
->withMiddleware(function (Middleware $middleware) {
// Commenting these out makes flash messages work but breaks normal sessions
// $middleware->use([
// \Illuminate\Session\Middleware\StartSession::class,
// \Illuminate\View\Middleware\ShareErrorsFromSession::class,
// \App\Http\Middleware\VerifyCsrfToken::class,
// ]);
})
->create();
app.php Configuration that makes normal sessions work but breaks flash:
return Application::configure(basePath: dirname(__DIR__))
->withMiddleware(function (Middleware $middleware) {
// Uncommenting these makes normal sessions work but breaks flash messages
$middleware->use([
\Illuminate\Session\Middleware\StartSession::class,
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
\App\Http\Middleware\VerifyCsrfToken::class,
]);
})
->create();
config/session.php:
return [
'driver' => env('SESSION_DRIVER', 'database'),
'lifetime' => env('SESSION_LIFETIME', 120),
'expire_on_close' => false,
'encrypt' => env('SESSION_ENCRYPT', false),
'files' => storage_path('framework/sessions'),
'connection' => env('SESSION_CONNECTION'),
'table' => env('SESSION_TABLE', 'sessions'),
'store' => env('SESSION_STORE'),
'lottery' => [2, 100],
'cookie' => env(
'SESSION_COOKIE',
Str::slug(env('APP_NAME', 'laravel'), '_').'_session'
),
'path' => env('SESSION_PATH', '/'),
'domain' => env('SESSION_DOMAIN'),
'secure' => env('SESSION_SECURE_COOKIE'),
'http_only' => env('SESSION_HTTP_ONLY', true),
'same_site' => env('SESSION_SAME_SITE', 'lax'),
'partitioned' => env('SESSION_PARTITIONED_COOKIE', false),
];
Debug Logs
When flash works (but normal sessions don't):
[2024-11-21 02:26:00] First Request:
{
"_token": "o5IooR4tva9abbacvE14SPzS1EKR7XKj7RKO8UWt",
"_flash": {"old": ["flash_message", "flash_type"], "new": []},
"flash_message": "语言更换成功.",
"flash_type": "success"
}
When normal sessions work (but flash doesn't):
{
"_token": "o5IooR4tva9abbacvE14SPzS1EKR7XKj7RKO8UWt",
"_flash": {"old": [], "new": []},
"locale": "en"
}
Environment
- Laravel Version: 11
- PHP Version: 8.2
- Session Driver: database
- Session Configuration: Using database driver
What I've Tried
- Using
session()->flash()
- Using
redirect()->with()
- Toggling middleware configuration in app.php
- Checking middleware order
- Verified session table exists and migrations are up to date
- Created custom flash implementation (works, but want to use Laravel's built-in functionality)
Tags: laravel
, php
, sessions
, flash-messages
, laravel-11
本文标签:
版权声明:本文标题:php - Why aren't Laravel's flash messages persisting after redirect in Laravel 11, and how can I fix this while 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/web/1742316652a2451949.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论