我正在尝试使会话在Laravel 5.7中工作,但是我似乎无法使其正常工作。我不知道为什么。我看过官方文档,看了一堆SO帖子,在其他站点上对这个问题进行了谷歌搜索,但我仍然无法弄清楚。
基本上,我在web.php
中有一条类似以下的路线:
Route::get('/some_path', 'SomeController@index');
然后,在index
的{{1}}方法中,我有以下内容:
SomeController
有了这个,我总是得到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
行,它仍然不会检索该值。
我还尝试使用正确的会话迁移文件la https://laravel.com/docs/5.7/session将会话切换为DB会话,但仍无法正常工作。
基本上,我不知道怎么回事。我可以说我没有使用本地的Laravel身份验证,所以我不确定这是否重要,但是我觉得不应该这样。另外,我尝试重新启动本地主机,但这并没有改变,并且运行了以下两个命令,两个命令似乎都没有改变:
test
最后,我尝试在控制器的顶部添加php artisan config:clear
php artisan route:clear
,但这似乎也没有关系。
基本上,我不知道该怎么办。可能是什么原因造成的?谢谢。
答案 0 :(得分:3)
这里发生的是,当您添加此内容时:
session(['test', 'x'])
它在会话的 0 索引处添加 test ,并在 1st 处添加 x 。 现在,当您再次执行
session(['test1', 'xx'])它将使用新值覆盖会话的 0th 和 1st 索引。 因此,当您打印会话数据时,您将获得最后的值。 您可以通过执行
String string = "content://com.android.providers.media.documents/document/image%3A38"
String secondString = string.substring(string.indexOf("com.android"));
并在屏幕上看到相同内容来进行检查。
如果要建立键值关系并将数据存储在这样的位置,请使用以下语法:
session(['test' => 'x']);
session(['test1' => 'xx']);
答案 1 :(得分:1)
无法保存会话的问题是您忘记了在给定put之后放置save()函数的例子。
$cartCount = Session::get('cartCount');
if(empty($cartCount)){
$cartCount = 0;
Session::put('cartCount', $cartCount);
}
Session::save();
答案 2 :(得分:1)
Session :: save()可以挽救生命,如果仍然存在问题,请绝对尝试。
答案 3 :(得分:1)
如果由于某种原因您的代码无法运行-例如,您在某处使用dd(),则您的会话将永远无法保存。这使我绊倒了20分钟。
答案 4 :(得分:0)
Laravel 5.7-在与文件系统的会话中存储值:
设置会话中的值:
session()->put('email', 'jai@gmail.com');
从会话中获取值:
$email = session()->get('email');
删除电子邮件会话:
session()->forget('email');
它的工作原理就像是魅力:)
答案 5 :(得分:0)
在这种情况下,您要做的就是在路由规则中添加“网络”中间件链功能。 例如
SELECT *
FROM wp_posts
JOIN wp_term_relationships
ON wp_posts.ID = wp_term_relationships.object_id
WHERE NOT EXISTS(
SELECT * FROM wp_term_relationships
)
然后清除缓存:
Route::get('/some_path', 'SomeController@index')->middleware('web');