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

○ 背景

  • 近期正进行 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();

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

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

③. 从 Session 中移除指定数据

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

【备注】:

  1. session 存储的文件默认存放于 storage/framework/sessions 目录下
  2. 文档中有说 ,如果你想要从 Session 中移除所有数据,可以使用 flush 方法,即 $request->session()->flush(); ,但是个人测试时发现,在登录成功进行赋值时,会显示如下的报错:

    ->>>>>>>> 【详细分析及解决方案,请参看附录(2)】

⑵. database 驱动方式

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

php artisan session:table

此时,建议将自动生成的文件,更改一下其中的一行代码:

②. 继续运行命令:

php artisan migrate

顺利执行的结果提示信息为:

若是不做前面的更改,很可能会出现下面的信息:

③. 驱动方式的配置

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

这里写图片描述

【备注】:

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

○ 附录

⑴. 参考文章

⑵.VerifyCsrfToken 影响

  • 报错情况如下:

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

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值