【发布时间】:2021-07-21 01:27:10
【问题描述】:
我有一个包含以下阶段的结帐流程:
- 价格结果
- 客户详情
- 付款
- 订单确认
我使用 PHP 会话变量来存储信息,并在用户继续购买时检查这些会话变量是否存在于整个购买过程中。我还有一些代码可以阻止用户直接点击客户、付款或订单确认页面,因为这意味着他们没有在结果页面上获得报价,也没有设置相关的会话变量。
问题:
似乎在平板电脑和智能手机上获得报价的用户正在与其他网站进行大量价格比较,并在标签页中打开我们的网站。但此类设备的行为与桌面浏览器不同。
如果您打开一个选项卡然后转到另一个应用程序,或加载许多其他网页,当您尝试返回上一个选项卡时,设备似乎会:
- 以您离开时的状态加载页面,或者
- 将重新加载标签 URL,就好像它是对页面的新点击一样。
还有问题。如果有人在我的客户页面或付款页面上,并且 URL 获得了新的点击,则会话似乎不存在并且我的代码认为有人是第一次点击该页面,这会向我的客户抛出一条友好的错误消息说请重新开始他们的报价。
我的系统设计是否糟糕?有人对我如何解决这个问题有任何建议吗?我真的需要一种方法来让客户坐在客户详细信息或付款阶段,也许几个小时,然后能够完成购买过程。
我应该使用会话、cookie 和数据库 - 还是组合使用?
【问题讨论】:
-
您是否在会话处理中记录或处理与客户 IP 相关的任何事情?如果您是,那么这可能是问题,因为客户可能在移动数据和无线之间漫游。或者,如果他们打开了许多页面并稍后返回您的页面,则会话可能只是过期。您有两个解决方案:让您的会话及时过期,或者您可以使用 cookie 让浏览器保存其状态,而不是依赖服务器...
-
增加会话超时。这是唯一的方法。或者让他们在后台关闭打开的应用程序。这不是这样做的方法。但是你不能对刷新做任何事情:只有用户。
-
我们将 session.gc_maxlifetime 设置为 86400 作为测试,看看 24 小时是否足够长。但是我们仍然会丢失会话并查看服务器变量,我可以看到这都是移动/平板电脑流量。我意识到这是由于此类设备上的浏览器是如何运行的。不活动后重新加载 URL。我想我需要在这里使用一个或多个 cookie,不是吗。但是如果我保存了 50-80 个信息会话变量,这仍然可行吗?
-
如果现有会话丢失,您能否重新启动它?因此,如果用户重新加载客户 URL,您是否可以将会话 ID 保存在 cookie 中,然后从中重新加载会话? IE。服务器是否还有信息,只是没有与用户的连接?这就是cookie可以提供帮助的地方吗?我在这里有点困惑......
标签: php session cookies session-variables session-cookies