Laravel 会话数据被重写

Posted

技术标签:

【中文标题】Laravel 会话数据被重写【英文标题】:Laravel Session Data getting rewritten 【发布时间】:2019-10-01 16:56:31 【问题描述】:

我遇到了一个奇怪的情况。这是我的代码:

public function getHomepage(Request $request)
    $data['testimonials'] = $this->getTestimonials();
    session()->put('location', 'north_america');
    \debugbar()->info('UPDATED SESSION');
    session()->save();
    return view('site.index')->with('data', $data);


public function getGlobalPage(Request $request)
    $data['testimonials'] = $this->getTestimonials();
    if(session()->has('location'))
        session()->forget('location');
    
    session()->put('location', 'global');
    session()->save();
    return view('site.global')->with('data', $data);


public function getFeaturesPage(Request $request)
    //\debugbar()->info($request);
    //echo session()->get('location');
    return view('site.features')->with('data', []);

这就是发生的事情。当我转到“主页”页面时,“位置”的会话变量返回为“north_america”。那很好。

如果我从“主页”页面移动到“全局”页面,“位置”的会话变量将返回为“全局”。那也很好。

如果我随后从“全局”页面移动到“功能”页面,“位置”的会话变量将返回为“north_america”。它没有被设置为 null 或其他东西,它似乎被重写了。怎么会这样?

路线如下:

Route::get('/', ['as' => 'site.home', 'uses' => 'Site\SiteController@getHomepage']);
Route::get('features', ['as' => 'site.features', 'uses' => 'Site\SiteController@getFeaturesPage']);
Route::get('global', ['as' => 'site.global', 'uses' => 'Site\SiteController@getGlobalPage']);

【问题讨论】:

告诉我你的路线。 添加在上面。是否有可能在功能页面之前点击主页? 【参考方案1】:

想通了。当浏览器尝试获取丢失的图像时,它会收到图像的 302 重定向。即使浏览器页面没有移动,这也会改变会话变量。

【讨论】:

以上是关于Laravel 会话数据被重写的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 会话突然被破坏

Laravel通过ajax登录维护会话

Laravel 4.1 会话变量被随机遗忘

Laravel:file_put_contents() 无法打开流:会话文件夹的权限被拒绝

Laravel 如何在会话 Laravel 中存储额外的数据/值

作者会话的 Laravel 更改重定向部分过期