为什么我的 Laravel 5.7 会话不起作用?
Why is my Laravel 5.7 session not working?
我试图让会话在 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
,但这似乎也不重要。
基本上,我不知道该怎么办。可能是什么原因造成的?谢谢。
这里发生的事情是当你添加这个时:
session(['test', 'x'])
它在会话的 0th 索引处添加 test,在 [=] 处添加 x 20=]1st。
现在当你再次做
session(['test1', 'xx'])
它用新值覆盖会话的 0th 和 1st 索引。
因此,当您打印会话数据时,您会得到最后的值。
您可以通过执行 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 分钟。
我试图让会话在 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
,但这似乎也不重要。
基本上,我不知道该怎么办。可能是什么原因造成的?谢谢。
这里发生的事情是当你添加这个时:
session(['test', 'x'])
它在会话的 0th 索引处添加 test,在 [=] 处添加 x 20=]1st。 现在当你再次做
session(['test1', 'xx'])它用新值覆盖会话的 0th 和 1st 索引。 因此,当您打印会话数据时,您会得到最后的值。 您可以通过执行
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 分钟。