我有一个结账流程,包括以下几个阶段:
-
价格结果
-
客户详细信息
-
付款
-
订单确认
在购买过程中,我使用PHP会话变量来存储信息,并在用户继续购买时检查这些会话变量是否存在。我还有一些代码可以阻止用户直接点击客户、付款或订单确认页面,因为这意味着他们没有在结果页面上获得报价,也不会设置相关的会话变量。
问题是:
在平板电脑和智能手机上获取报价的用户似乎正在与其他网站进行大量的价格比较,并将我们的网站保留在一个选项卡中。但这种设备的行为与桌面浏览器不同。
看起来,如果你打开一个选项卡,然后转到另一个应用程序,或加载许多其他网页,当你尝试返回上一个选项卡时,设备将:
-
将页面加载到您离开的状态,或者
-
将重新加载选项卡URL,就像它是页面的新点击一样。
这就是问题所在。如果有人在我的客户页面或付款页面上,并且URL再次被点击,则会话似乎不存在,并且我的代码认为有人第一次点击了该页面,这会向我的客户发出友好的错误消息,表示请重新启动报价。
我的系统设计糟糕吗?有没有人对我如何避开这件事有什么建议?我真的需要一种方法,让客户坐在客户详细信息阶段或付款阶段,可能需要几个小时,然后才能完成购买过程。
我应该使用会话、cookie和数据库,还是组合使用?