版权声明:本文为博主原创文章,未经博主允许不得转载。 https://cloud.tencent.com/developer/article/1333807
框架:Laravel5.5 重点: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分钟的有效时间
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');
【备注】:
storage/framework/sessions
目录下 $request->session()->flush();
,但是个人测试时发现,在登录成功进行赋值时,会显示如下的报错: ->>>>>>>> 【详细分析及解决方案,请参看附录(2)】
① . 可以使用 Artisan 命令 session:table 在数据库中创建表:
php artisan session:table
此时,建议将自动生成的文件,更改一下其中的一行代码:
②. 继续运行命令:
php artisan migrate
顺利执行的结果提示信息为:
若是不做前面的更改,很可能会出现下面的信息:
③. 驱动方式的配置
SESSION_DRIVER=database
【备注】:
通过网上信息搜索,基本的观点就是
CSRF
的禁用限制,最简单的方式就是禁用CSRF
,可以参考文章(Laravel VerifyCsrfToken 报错解决),我选择了其中的一种.