PHP 返回浏览器时,智能手机上的会话丢失

PHP Session is lost on smartphones when returning to browser

我有一个包含以下阶段的结帐流程:

  1. 价格结果
  2. 客户详情
  3. 付款
  4. 订单确认

我使用 PHP 会话变量来存储信息,并且在用户继续购买时检查这些会话变量在整个购买过程中是否存在。我还有一些代码可以阻止用户直接访问客户、付款或订单确认页面,因为这意味着他们没有在结果页面上获得报价,也不会设置相关的会话变量。

问题:

似乎在平板电脑和智能手机上获取报价的用户正在与其他网站进行大量价格比较,并在选项卡中打开我们的网站。但此类设备的行为与桌面浏览器不同。

似乎如果您让一个选项卡保持打开状态然后转到另一个应用程序,或加载许多其他网页,那么当您尝试 return 到上一个选项卡时,设备将:

问题来了。如果有人在我的客户页面或支付页面上,并且 URL 获得了新的点击,会话似乎不存在并且我的代码认为有人是第一次点击该页面,这会抛出一个友好的错误给我的客户留言说请重新开始他们的报价。

我的系统设计不好吗?有没有人对我如何解决这个问题有任何建议?我真的需要一种方法让客户在客户详细信息标签或付款阶段停留几个小时,然后才能完成购买过程。

我应该使用会话、cookie 和数据库还是组合使用?

只有使用 cookie 才能可靠地解决您的问题。 PHP 可以将其会话变量存储在 cookie 中,并通过会话 cookie 的值在内部读取所有相关的会话参数。

因此,您得到的不是 URL 会话,而是 cookie 会话。

只需在每个 php 文件的顶部使用 session_start() ,或者如果您有一个始终首先加载的主对象(例如 index.php),请将 session_start() 那里。