为什么我的 Laravel 5.7 会话不起作用?

Har*_*San 2 php session routes config laravel

我试图让会话在 Laravel 5.7 中工作,但我似乎无法让它工作;我不知道为什么。我查看了官方文档,查看了一堆 SO 帖子,在其他网站上搜索了该问题,但我仍然无法弄清楚。

基本上,我有一条如下所示的路线web.php

Route::get('/some_path', 'SomeController@index');
Run Code Online (Sandbox Code Playgroud)

然后,在 的index方法中SomeController,我有以下内容:

session(['test', 'Some Value']);
session(['test2', 'Some Other Value']);
session(['test3', 'Some Third Value']);
$value = session('test', 'Backup Value');
echo $value;
Run Code Online (Sandbox Code Playgroud)

有了这个,我总是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";}
Run Code Online (Sandbox Code Playgroud)

基本上,看起来会话有点工作,但它似乎只存储test3. 如果我注释掉test3控制器中的行,那么它只存储test2. 即使我test在控制器中只有一行,它仍然没有检索到值。

我还尝试使用正确的会话迁移文件将会话切换到数据库会话,例如https://laravel.com/docs/5.7/session,但它仍然无法正常工作。

基本上,我不知道发生了什么。我可以说我没有使用本地 Laravel 身份验证,所以我不确定这是否重要,但我觉得不应该。此外,我尝试重新启动我的本地主机,但这并没有产生任何区别并运行以下两个命令,这两个命令似乎都没有改变任何东西:

php artisan config:clear
php artisan route:clear
Run Code Online (Sandbox Code Playgroud)

最后,我尝试use Session在控制器顶部添加,但这似乎也无关紧要。

基本上,我不知道该怎么办。什么可能导致这种情况?谢谢你。

Dee*_*ngh 7

这里发生的事情是,当您添加此内容时:

会话(['测试','x'])

它在会话的第 0 个索引处添加test,在1st处添加x。现在当你再次做一个

会话(['test1','xx'])
它用新值覆盖会话的第 0第 1 个索引。因此,当您打印会话数据时,您将获得最后一个值。您可以通过执行 add(session()->all())并在屏幕上看到相同的内容来检查这一点。如果您想建立键值关系并将数据存储在这样的地方,请使用如下语法:

session(['test' => 'x']);
session(['test1' => 'xx']);