欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Laravel5.5 session 的配置及使用示例讲解

程序员文章站 2022-03-10 10:01:31
...

○ 背景

  • 近期正进行 Laravel5.5 框架的学习,当然还是在一点点深入,虽然没有信息研究核心源码,至少要能灵活顺畅的应用,接下来,主要是介绍Session在 Laravel5.5 中的应用,欢迎指导建议,必将虚心求知 …

框架:Laravel5.5
重点:Session

○ 概述

⑴. 提示信息

  • 首先,如果在 Laravel 中使用 session 功能,需要明确以下的知识点:

Laravel 并没有使用 PHP 内置的 Session 功能,而且自己实现了一套更加灵活更加强大的 Session 机制,核心逻辑请参考 Illuminate\Session\Middleware\StartSession这个中间件,因此在 Laravel 应用中不要试图通过$_SESSION方式去获取应用的 Session 值,这是徒劳的。
另外,还有一个大家都感到困惑的问题,就是在 Laravel 的控制器构造函数中是无法获取应用 Session 数据的,这是因为 Laravel 的 Session 通过 StartSession 中间件启动,既然是中间件就会在服务容器注册所有服务之后执行,而控制器们的构造函数都是在容器注册服务的时候执行的,所以这个时候 Session 尚未启动,又何来的获取数据呢?解决办法是将获取 Session 数据逻辑后置或者在构造函数中引入在 StartSession 之后执行的中间件

⑵. 配置信息

  • 主要能使用到的配置信息,config.session 一般不要更改此文件,若有改动应该配置 .env 文件.
'driver' => env('SESSION_DRIVER', 'file'),  //驱动选择模式
'lifetime' => env('SESSION_LIFETIME', 120),  //默认120分钟的有效时间

○ 使用指导

⑴. file 驱动方式

  • 默认框架的配置信息下,使用的是 file 类型,也可以配置 .env 文件中的:SESSION_DRIVER=file

    主要使用的几个方法为:

    ①. 首先是设置需要的key值,经个人测试发现,需要添加 session()->save(); 才能生效

$request->session()->put('cmsAID', $tag);
//测试发现 "$request->" 可加也可不加!
$request->session()->save();

Laravel5.5 session 的配置及使用示例讲解

②. session 获取 key 值,较为简单

$cmsAID = $request->session()->get('cmsAID');

③. 从 Session 中移除指定数据

$request->session()->forget('cmsAID');

Laravel5.5 session 的配置及使用示例讲解

【备注】:

  1. session 存储的文件默认存放于 storage/framework/sessions 目录下
    Laravel5.5 session 的配置及使用示例讲解
  2. 文档中有说 ,如果你想要从 Session 中移除所有数据,可以使用 flush 方法,即 $request->session()->flush(); ,但是个人测试时发现,在登录成功进行赋值时,会显示如下的报错:
    Laravel5.5 session 的配置及使用示例讲解
    ->>>>>>>> 【详细分析及解决方案,请参看附录(2)】

⑵. database 驱动方式

① . 可以使用 Artisan 命令 session:table 在数据库中创建表:

php artisan session:table

Laravel5.5 session 的配置及使用示例讲解

此时,建议将自动生成的文件,更改一下其中的一行代码:
Laravel5.5 session 的配置及使用示例讲解

②. 继续运行命令:

php artisan migrate

顺利执行的结果提示信息为:
Laravel5.5 session 的配置及使用示例讲解
若是不做前面的更改,很可能会出现下面的信息:
Laravel5.5 session 的配置及使用示例讲解

③. 驱动方式的配置

SESSION_DRIVER=database
  • 此时进行页面的访问,数据表会被插入一条数据,且不同的浏览器打开网站时,都会增加一条:

Laravel5.5 session 的配置及使用示例讲解

【备注】:

  1. 相关 session 的处理代码,可通用,无需修改,此为优势
  2. 其实我就没明白,这个 session 表 的存在意义是如何的?并且字段 user_id 没有赋值
  3. 每次页面刷新或跳转,在时效内,都会进行更新,唯一不变的是 id 不变,待到有效期过后或者更换浏览器再增加新的记录.
  4. 个人理解,此 session 表 是框架在 database 驱动模式下自行访问的表,因为发现在调试环境下,页面进行跳转时会自行执行下面的查询,具体的还未找到解释,暂时理解为框架默许机制.
    Laravel5.5 session 的配置及使用示例讲解

○ 附录

⑴. 参考文章

⑵.VerifyCsrfToken 影响

  • 报错情况如下:
    Laravel5.5 session 的配置及使用示例讲解

通过网上信息搜索,基本的观点就是 CSRF的禁用限制,最简单的方式就是禁用 CSRF,可以参考文章(Laravel VerifyCsrfToken 报错解决),我选择了其中的一种.
Laravel5.5 session 的配置及使用示例讲解

相关标签: Session