为什么我的Laravel 5.7会话无法正常工作?

时间:2019-02-19 14:27:45

标签: php laravel session routes config

我正在尝试使会话在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 ,但这似乎也没有关系。

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

6 个答案:

答案 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');