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

Why is my Laravel 5.7 session not working?

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

基本上,我在web.php中有如下路线:

Route::get('/some_path', 'SomeController@index');

然后,在SomeControllerindex方法中,我有以下内容:

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,但这似乎也不重要。

基本上,我不知道该怎么办。可能是什么原因造成的?谢谢。

这里发生的事情是当你添加这个时:

session(['test', 'x'])

它在会话的 0th 索引处添加 test,在 [=] 处添加 x 20=]1st。 现在当你再次做

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

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

Laravel 5.7 - 在与文件系统的会话中存储值:

在会话中设置值:

session()->put('email', 'jai@gmail.com');

从会话中获取值:

$email = session()->get('email');

删除邮件会话:

session()->forget('email');

它很有魅力:)

在这种情况下,您需要做的就是将 "web" 中间件链函数添加到您的路由规则中。 例如

Route::get('/some_path', 'SomeController@index')->middleware('web');

然后清除缓存:

php artisan config:clear
php artisan route:clear

那些无法保存会话的人,问题是你们忘了在 put 之后添加 save() 函数,给出的例子就是。

$cartCount = Session::get('cartCount');
        if(empty($cartCount)){
            $cartCount = 0;
            Session::put('cartCount', $cartCount);
        }
        Session::save();

Session::save() 可以挽救生命,如果仍然有问题,一定要试试。

如果由于某种原因您的代码没有 运行 通过 - 例如您在某处使用 dd() ,那么您的会话将永远不会保存。这把我绊倒了整整 20 分钟。