【发布时间】:2019-02-19 14:27:45
【问题描述】:
我正在尝试让会话在 Laravel 5.7 中工作,但我似乎无法让它工作;我不确定为什么。我查看了官方文档,查看了一堆 SO 帖子,在其他网站上搜索了该问题,但我仍然无法弄清楚。
基本上,我在web.php 中有如下路线:
Route::get('/some_path', 'SomeController@index');
然后,在SomeController 的index 方法中,我有以下内容:
session(['test', 'Some Value']);
session(['test2', 'Some Other Value']);
session(['test3', 'Some Third Value']);
$value = session('test', 'Backup Value');
echo $value;
这样,我总是在屏幕上回显Backup Value。
如果我进入/storage/framework/sessions,我会看到一个包含以下内容的会话文件(我已将其匿名化):
a:5:{s:6:"_token";s:40:"token-here";s:9:"_previous";a:1:{s:3:"url";s:26:"http://example.com/some_path";}s:6:"_flash";a:2:{s:3:"old";a:0:{}s:3:"new";a:0:{}}i:0;s:5:"test3";i:1;s:16:"Some Third Value";}
基本上,会话看起来有点工作,但它似乎只存储test3。如果我注释掉控制器中的test3 行,那么它只存储test2。即使我在控制器中只有test 行,它仍然无法检索到值。
我还尝试使用正确的会话迁移文件(例如 https://laravel.com/docs/5.7/session)将会话切换到数据库会话,但它仍然无法正常工作。
基本上,我不知道发生了什么。我可以说我没有使用本地 Laravel 身份验证,所以我不确定这是否重要,但我觉得不应该。另外,我尝试重新启动我的本地主机,但这并没有什么不同,并且运行以下两个命令,这两个命令似乎都没有改变:
php artisan config:clear
php artisan route:clear
最后,我尝试在控制器顶部添加use Session,但这似乎也不重要。
基本上,我不知道该怎么做。这可能是什么原因造成的?谢谢。
【问题讨论】:
-
可以使用 Laravel 的 session 推送方式。例如
Session::push('test', 'some value'); -
如果你把它放在第一位会发生什么? $value = session('test', '备份值');
-
Deepak Singh、
Session::put()和Session::push()有效,但session()无效。为什么?技术骑手,改变顺序并没有什么不同。此外,我的部分会话文件现在如下所示:"test";i:1;s:10:"Some Value";s:4:"test";s:10:"Some Value";s:5:"test2";s:16:"Some Other Value";基本上,它似乎存储了来自session()和Session::put()的内容,尽管无法检索session()。我还是很困惑。 Laravel 在幕后做了什么来阻止session()工作? -
另外,对于它的价值,似乎
Session类只允许保存会话的文件方法。我尝试将session.php中的SESSION_DRIVER从file更改为database,但它没有保存在数据库中;它仍然保存到storage目录中的文件中。 -
@HartleySan 更新了答案。检查是否对您有帮助。
标签: php laravel session routes config