Laravel 实现了一种处理会话的自定义方式,但逻辑与 中描述的相同PHP 会话文档 http://php.net/manual/en/session.examples.basic.php。以下是该文档的摘录,几乎解释了其背后的逻辑:
会话是根据唯一会话 ID 存储单个用户数据的简单方法。这可用于在页面请求之间保留状态信息。会话 ID 通常通过会话 cookie 发送到浏览器,并且该 ID 用于检索现有会话数据。如果缺少 ID 或会话 cookie,PHP 就会知道创建新会话并生成新会话 ID。
因此,您对会话如何使用 ID 的理解是正确的,但是会话还有另一个组件定义了会话的持续时间。会话在预定义的时间段后过期,对于 Laravel,可以在config/session.php
file:
'lifetime' => 120,
上述默认值意味着会话将在用户不活动 120 分钟后过期。还可以选择在用户关闭浏览器时使会话过期,从而在用户再次打开浏览器时强制生成新会话,方法是设置:
'expire_on_close' => true,
您应该阅读Laravel 会话文档 http://laravel.com/docs/5.1/session想要更多地了解 Laravel 如何处理会话,还可以阅读来自config/session.php
文件解释每个配置选项的作用以及它可以采用的值。
上面解释了会话在 PHP 和 Laravel 中的工作原理,因此在您的情况下,要使会话持续整整一个月,您可以设置lifetime
价值:
'lifetime' => 60*24*30 // 60 minutes x 24 hours x 30 days = 43200 minutes
但这似乎需要很长的时间来保持会话,特别是如果会话还包含身份验证信息。如果您想保留购物车的内容,我建议您将它们存储在数据库中,当用户下次登录时,只需从数据库填充会话即可。
例如卡特里斯特购物车 https://cartalyst.com/manual/cart/2.0#cart-sync库(恰好有非常好的 Laravel 集成)处理购物车背后的所有逻辑,同时提供一个很好的sync https://cartalyst.com/manual/cart/2.0#cart-sync方法,允许您将数据库中存储的购物车商品添加到当前会话。您可以执行以下操作来从数据库恢复购物车:
// Get the items from the database
$items = CartItem::where('user_id', Auth::id())->get();
// Sync the items with the session cart
Cart::sync($items);
以上假设您有一个cart_items
表有一个CartItem
模型已附上,并且您正在使用Laravel 身份验证 http://laravel.com/docs/5.1/authentication处理用户会话,但正如您所看到的,它导致了一个非常容易实现的解决方案。