前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Laravel5.5 session 的配置及使用示例讲解

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

作者头像
泥豆芽儿 MT
发布2018-09-11 11:33:23
1.3K0
发布2018-09-11 11:33:23
举报

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://cloud.tencent.com/developer/article/1333807

○ 背景

  • 近期正进行 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 文件.
代码语言:javascript
复制
'driver' => env('SESSION_DRIVER', 'file'),  //驱动选择模式
'lifetime' => env('SESSION_LIFETIME', 120),  //默认120分钟的有效时间

○ 使用指导

⑴. file 驱动方式

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

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

代码语言:javascript
复制
$request->session()->put('cmsAID', $tag);
//测试发现 "$request->" 可加也可不加!
$request->session()->save();

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

代码语言:javascript
复制
$cmsAID = $request->session()->get('cmsAID');

③. 从 Session 中移除指定数据

代码语言:javascript
复制
$request->session()->forget('cmsAID');

【备注】:

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

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

⑵. database 驱动方式

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

代码语言:javascript
复制
php artisan session:table

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

②. 继续运行命令:

代码语言:javascript
复制
php artisan migrate

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

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

③. 驱动方式的配置

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

【备注】:

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

○ 附录

⑴. 参考文章

⑵.VerifyCsrfToken 影响

  • 报错情况如下:

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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018年03月09日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • ○ 背景
  • ○ 概述
    • ⑴. 提示信息
      • ⑵. 配置信息
      • ○ 使用指导
        • ⑴. file 驱动方式
          • ⑵. database 驱动方式
          • ○ 附录
            • ⑴. 参考文章
              • ⑵.VerifyCsrfToken 影响
              相关产品与服务
              消息队列 TDMQ
              消息队列 TDMQ (Tencent Distributed Message Queue)是腾讯基于 Apache Pulsar 自研的一个云原生消息中间件系列,其中包含兼容Pulsar、RabbitMQ、RocketMQ 等协议的消息队列子产品,得益于其底层计算与存储分离的架构,TDMQ 具备良好的弹性伸缩以及故障恢复能力。
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档