为什么注销后Laravel 5.5 Session数据丢失?

时间:2018-07-11 13:38:50

标签: php laravel session logout

我了解到laravel在用户登录时会生成一个新的会话ID,但在这种情况下,它会保留会话数据,但是为什么在用户注销时数据消失了?因此,这是我要从会话中获取CartID的方法:

public function getId()
{
    if (!Auth::check()) {
        if (!session()->has('CartID'))
            session()->put('CartID', session()->getId());
        return session('CartID');
    }
    else {
        return session('CartID', '');
    }
}

我将上述方法中的CartID以及当前会话ID传递给刀片,并显示它们。 (这仅是为了开发目的来“测试”其工作原理。) 因此,当我第一次访问网站但未登录时,它会显示与购物车ID和会话ID相同的值。然后,我登录并返回该页面,然后它显示原始(相同)购物车ID,但显示一个新的会话ID,这也是人们期望的。我什至已经测试过完全关闭浏览器并重新打开,当我返回时,我仍然具有带有不同会话ID的原始购物车ID(与关闭时相同)。因此,这证明关闭浏览器后,会话数据仍然完整。到目前为止,一切都很好。但是,如果我注销然后转到页面,则CartID现在已更改为新的会话ID,因此我丢失了Cart ID的原始值。这表明我注销后会丢失所有会话数据。 以下是我认为从会话配置文件中可能有用的内容:

'driver' => env('SESSION_DRIVER', 'file'),
'lifetime' => 2880,
'expire_on_close' => false,
'encrypt' => true,
'domain' => env('SESSION_DOMAIN', null),

谁能解释为什么注销后会话数据丢失? 我正在运行php 7.1和Laravel 5.5 预先感谢

3 个答案:

答案 0 :(得分:3)

答案 1 :(得分:0)

如果要保存用户的会话数据(从本质上来说,它不是那样设计的),则应制作一个数据库表并以这种方式存储数据。或考虑使用Cookie。

简而言之,应该在注销后清除会话数据。

答案 2 :(得分:0)

看看我的AvoRed E Commerce的购物车外观。我没有任何问题。 如果您想尝试一下AvoRed,请立即尝试,但现在正在开发中。

https://github.com/avored/framework/blob/master/src/Cart/Manager.php