为什么登出后 Laravel 5.5 Session 数据丢失?

Why is Laravel 5.5 Session data lost after loggin out?

我理解 laravel 会在用户登录时生成一个新的 session id,但在那种情况下它会保留 session 数据,但为什么数据会消失用户何时注销?所以这是我调用的一种方法,用于从 session:

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

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

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

谁能解释一下为什么 session 数据在注销后丢失了? 我是 运行 php 7.1 和 Laravel 5.5 提前致谢

因为会话失效:https://github.com/laravel/framework/blob/9a912d6f7da4d15144d73afc9213a5ef0f8db3e2/src/Illuminate/Foundation/Auth/AuthenticatesUsers.php#L157

如果您想保存用户的会话数据(本来就不是那样设计的),您应该创建一个数据库 table 并以此方式存储数据。或者考虑使用 cookie。

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

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

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