Laravel 5.5 Session 处理

本文详细介绍了Laravel 5.5中Session的处理,包括配置、使用方法、自定义驱动等。强调了Laravel使用自己的Session机制而非PHP内置,解释了在控制器构造函数中无法直接获取Session数据的原因,并提供了解决方案。同时,文中还讲解了如何在不同驱动(如file、cookie、database、memcached/redis)间切换,以及如何实现和注册自定义Session驱动。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

简介

由于 HTTP 协议本身是无状态的,上一个请求与下一个请求无任何关联,为此我们引入 Session 来存储用户请求信息以解决特定场景下无状态导致的问题(比如登录、购物)。

Laravel 通过简洁的 API 统一处理后端各种 Session 驱动,目前开箱支持的流行后端驱动包括 Memcached、Redis 和数据库。

Laravel 并没有使用 PHP 内置的 Session 功能,而是自己实现了一套更加灵活更加强大的 Session 机制,核心逻辑请参考 Illuminate\Session\Middleware\StartSession 这个中间件,因此在 Laravel 应用中不要试图通过 $_SESSION 方式去获取应用的 Session 值,这是徒劳的。

另外,还有一个大家都感到困惑的问题,就是在 Laravel 的控制器构造函数中是无法获取应用 Session 数据的,这是因为 Laravel 的 Session 通过 StartSession 中间件启动,既然是中间件就会在服务容器注册所有服务之后执行,而控制器的构造函数都是在容器注册服务的时候执行的,所以这个时候 Session 尚未启动,又何来的获取数据呢?解决办法是将获取 Session 数据逻辑后置或者在构造函数中引入在 StartSession 之后执行的中间件。

配置

Session 配置文件位于 config/session.php。默认情况下,Laravel 使用的 Session 驱动为 file 驱动,这对许多应用而言是没有什么问题的。在生产环境中,你可能考虑使用 memcached 或者 redis 驱动以便获取更佳的 Session 性能,尤其是线上同一个应用部署到多台机器的时候,这是最佳实践。

Session 驱动用于定义请求的 Session 数据存放在哪里,Laravel 可以处理多种类型的驱动:

  • file: Session 数据存储在 storage/framework/sessions 目录下;
  • cookie: Session 数据存储在经过安全加密的 Cookie 中;
  • database: Session 数据存储在数据库中;
  • memcached / redis: Session 数据存储在 Memcached/Redis 缓存中,访问速度最快;
  • array: Session 数据存储在简单 PHP 数组中,在多个请求之间是非持久化的。

注:数组驱动通常用于运行测试以避免 Session 数据持久化。

Session 默认采用 file 驱动,默认的驱动在 .env 文件中设置。

SESSION_DRIVER=file

Session 驱动预备知识

数据库

当使用 database 作为 Session 驱动时,需要设置表包含 Session 字段,下面是该数据表的表结构声明:

Schema::create('sessions', function ($table) {
    $table->string('id')->unique();
    $table->unsignedInteger('user_id')->nullable();
    $t
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值