为什么Laravel 8.0的session在控制器正常、视图页面无法读取?
Laravel 8 Session存入后跳转视图无法读取解决方案
- 检查路由所属中间件组
Laravel 8的Session功能依赖web中间件组提供的StartSession中间件,所有需要用到Session的路由必须定义在routes/web.php文件中,或是手动挂载web中间件。如果相关路由写在了routes/api.php中,默认不会加载Session相关中间件,就会出现控制器写入后跳转读取不到的问题。
路由参考写法:
// routes/web.php use App\Http\Controllers\UserSession; Route::post('/login-submit', [UserSession::class, 'loginSession']); Route::get('/profile', function () { return view('profile'); });
- 检查Session驱动配置与权限
打开项目根目录.env文件,确认SESSION_DRIVER配置项:如果使用默认的file驱动,需要确保storage/framework/sessions目录权限为755,且所属用户与Web服务运行用户一致,保证写入权限正常;如果使用redis/database等驱动,需要先确认对应服务连接、数据表配置正常。 - 强制Session持久化写入
部分场景下Session自动保存逻辑可能未触发,可以在写入Session后手动调用save()方法强制持久化,修改控制器代码如下:
namespace App\Http\Controllers; use Illuminate\Http\Request; class UserSession extends Controller { public function loginSession(Request $req) { $data = $req->input(); $req->session()->put('username',$data['username']); // 新增强制保存代码 $req->session()->save(); return redirect("profile"); } }
- 排查全局Session清理逻辑
检查是否存在全局中间件、profile页对应控制器逻辑中存在session()->flush()、session()->forget('username')之类的Session清理代码,导致跳转后Session被清空。 - 视图读取Session写法校验
你当前的视图写法是符合规范的,也可以替换为以下写法测试:
<p>Hello, {{ Session::get('username') }}</p> <!-- 或者 --> <p>Hello, {{ request()->session()->get('username') }}</p>
内容的提问来源于stack exchange,提问作者Geeta
相关产品推荐
相关产品推荐

