gpt4 book ai didi

php - 如何识别 guest 用户的时间比 session 通常存在的时间长

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:34:58 28 4
gpt4 key购买 nike

我知道,我可以使用 \Session::getId()。但它会不时改变形式。也许我不明白 session 。据我所知,它在 php 运行时开始,并在 php 代码完成时被删除。另一方面,我读到 session ID 存储在 cookie 中,当用户再次打开您的网站时, session “恢复”。那么为什么在我的例子中 session ID 过期这么快。我怎样才能获得至少一个月内不会改变并且被购物车使用的“ session ID”?

更新:问题变得有点困惑,因为我不想知道如何调用某些东西,也不知道这些东西是如何工作的。

我想知道如何识别 guest 用户并在一段时间内(比 session 通常存在的时间更长)获取其唯一 ID。结果我想要函数 someFunction 可以执行以下操作:

$guestId = someFunction();
$dbRow = Model::findByGuestIdOrNew($guestId);
// now $dbRow contains all previosly save info about a guest user,
// of it does not exists, create new row by `$guestId`.

在我看来,session有一些唯一的id,它存在的时间比session长。当我看到在大多数购物车包中购物车项目直接保存到 session 时,我想到了这个想法。我真的不知道这些包裹存放了多长时间的购物车元素,但我认为这个时间甚至超过一周。我在使用此类购物平台时定义了购物车生命周期的这段时间:shopifybigcommerce .我知道他们储存购物车元素的时间超过一周。所以我想知道他们如何在创建帐户之前识别 guest 用户。此外,了解大多数“购物车”包存储购物车商品的时间也是一个有用的信息。

最佳答案

Laravel 实现了一种处理 session 的自定义方式,但逻辑与 PHP Sessions Documentation 中描述的逻辑相同。 .以下是该文档的摘录,几乎解释了其背后的逻辑:

Sessions are a simple way to store data for individual users against a unique session ID. This can be used to persist state information between page requests. Session IDs are normally sent to the browser via session cookies and the ID is used to retrieve existing session data. The absence of an ID or session cookie lets PHP know to create a new session, and generate a new session ID.

因此,您对 session 如何使用 ID 的理解是正确的,但 session 还有另一个组件定义它们持续多长时间。 session 在预定义的时间后过期,对于 Laravel,可以在 config/session.php 文件中设置:

'lifetime' => 120,

上述默认值意味着 session 将在用户不活动 120 分钟后过期。还可以选择在用户关闭浏览器时使 session 过期,从而在用户再次打开浏览器时强制生成新 session ,方法是:

'expire_on_close' => true,

您应该阅读 Laravel Sessions Documentation为了更深入地了解 Laravel 如何处理 session ,还可以阅读 config/session.php 文件中的注释,其中解释了每个配置选项的作用以及它可以采用的值。


上面解释了 session 在 PHP 和 Laravel 中是如何工作的,所以在您的情况下,要使 session 持续整整一个月,您可以将 lifetime 值设置为:

'lifetime' => 60*24*30 // 60 minutes x 24 hours x 30 days = 43200 minutes

但是保持 session 的时间似乎真的很长,尤其是在 session 还包含身份验证信息的情况下。如果您想保留购物车的内容,我建议您将它们存储在数据库中,当用户下次登录时,只需从数据库中填充 session 即可。


例如 Cartalyst Cart库(碰巧有非常好的 Laravel 集成)处理购物车背后的所有逻辑,同时提供一个很好的 sync允许您将存储在数据库中的购物车项目添加到当前 session 的方法。您可以执行以下操作以从数据库中恢复购物车:

// 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 Authentication来处理用户 session ,但如您所见,它导致了一个非常容易实现的解决方案。

关于php - 如何识别 guest 用户的时间比 session 通常存在的时间长,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34098981/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com