跳转到主要内容

什么是 Session

HTTP 是无状态协议,其自身并没有跨请求保存用户信息的机制。 Laravel 的 Session 功能提供了一种在多次请求之间保存用户数据的方式。 登录状态、购物车中的商品、表单尚未提交的输入等,需要在多次请求间保持的信息,都可以放到 Session 中。

Session 驱动配置

Session 相关配置写在 config/session.php 中。 可以通过 SESSION_DRIVER 环境变量(在 .env 中)切换驱动。
Laravel 默认支持的驱动如下:
Laravel 默认项目使用 database 驱动。使用 database 需要 sessions 表,默认迁移中已包含,可直接使用。

访问 Session

访问 Session 有两种方式:通过 Request 实例的方法,或使用全局辅助函数 session()

使用 Request 实例

在控制器方法中类型提示 Request,然后通过 $request->session() 访问 Session。

使用全局辅助函数 session()

session() 辅助函数可以在控制器、视图等任何地方调用。
两种方式都可以在测试中通过 assertSessionHas 校验。控制器内使用 $request->session() 可以让依赖关系更明确。

Session 操作

获取数据

判断是否存在

请注意 hasexists 的差异:

保存数据

删除数据

闪存数据(Flash Data)

闪存数据是只在下一次请求中有效的 Session 数据。 用于表单提交完成后的一次性提示、错误消息等信息。

使用 flash() 保存

该数据可以在下一次请求中读取,之后会自动删除。

延长闪存数据

在 Blade 中显示闪存消息

将闪存消息的展示写在布局文件(如 layouts/app.blade.php)中,可以在所有页面统一展示。

实践示例:表单提交后的消息展示

在表单提交后,将成功消息保存到 Session 并重定向,然后在目标页展示——这是 Web 应用中的经典模式。
1

定义路由

2

实现控制器

在处理表单提交的 store 方法中,保存后携带成功消息进行重定向。
redirect()->with('success', '...') 是把闪存数据传给重定向目标的快捷方式。
3

在布局中展示消息

resources/views/layouts/app.blade.php 中加入闪存消息展示部分。
4

创建列表页视图

保存并重定向后,列表页顶部会显示一次「文章已创建。」的提示。

与校验错误结合的模式

校验失败时使用 back()->withErrors()。 Laravel 在校验失败时会自动将错误保存为闪存数据,因此在 Blade 中可以直接使用 $errors 变量。
flush() 会删除 Session 中的所有数据,登录状态等也会一并丢失。若只想删除用户相关数据,请使用 forget() 指定特定键。

下一步

校验

了解如何通过校验来验证表单输入。
最后修改于 2026年7月18日