如何识别访客用户的时间比通常存在的时间长

时间:2015-12-04 23:05:50

标签: php laravel session

我知道,我可以使用\Session::getId()。但它不时变化。也许我不理解会议。据我所知,当php运行时它会启动,当php代码完成时它会被删除。另一方面,我读到会话ID存储在cookie中,当用户再次打开您的网站时,会话将恢复'。那么为什么在我的情况下会话ID到期如此之快。如何获得会话ID'至少在一个月内没有改变且购物车使用的是什么?

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

我想知道如何识别访客用户并在一段时间内获得其唯一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`.

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

1 个答案:

答案 0 :(得分:5)

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

  

会话是针对单个会话ID为各个用户存储数据的简单方法。这可用于在页面请求之间保留状态信息。会话ID通常通过会话cookie发送到浏览器,ID用于检索现有会话数据。缺少ID或会话cookie使PHP知道创建新会话,并生成新的会话ID。

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

'lifetime' => 120,

以上默认值表示会话将在用户不活动120分钟后过期。当用户关闭浏览器时,还有一个选项可以使会话到期,从而在他再次打开浏览器时强制生成新会话,方法是设置:

'expire_on_close' => true,

您应该阅读Laravel Sessions Documentation以了解有关Laravel如何处理会话的更多信息,并阅读config/session.php文件中的注释,这些注释解释了每个配置选项的作用以及它可以采取的值。

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

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

但是这似乎是一个非常长的时间来保持会话,特别是如果会话还包含身份验证信息。如果您想要保留购物车的内容,我建议您将它们存储在数据库中,当用户下次登录时,只需从数据库填充会话。

例如Cartalyst Cart库(碰巧有非常好的Laravel集成)处理购物车背后的所有逻辑,同时提供一个很好的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 Authentication来处理用户会话,但正如您所见它导致了一个非常容易实现的解决方案。