处理用户在php中关闭浏览器的情况

时间:2011-07-13 13:28:32

标签: php

我有一个buy.php页面,用户选择产品,输入一些数据,如他的姓名,地址等。接下来他点击“购买”按钮移动到支付网关网站输入他的信用卡号+ CVV此时,如果没有点击此页面上的“付款”按钮,他将关闭浏览器或关闭计算机。此转换ID保存在会话中。

如何跟踪这种情况并将其作为“用户已中止”保存在PHP数据库中的事务ID中?

5 个答案:

答案 0 :(得分:2)

我们处理此问题的方法是从一开始就将数据库中的事务状态保持为“不完整”(或在您的情况下为“中止”)。付款完成后,交易状态将更改为“已完成”。

答案 1 :(得分:0)

您无法通过php(服务器端)处理浏览器事件(客户端)

使用应该在浏览器窗口关闭时触发的jQuery函数.unload()

文档:http://api.jquery.com/unload/

注意:当客户端计算机立即关机时(不使用“开始”>“关闭”或类似的操作系统功能),没有什么可以处理的情况

注2:网页中没有任何内容可以解决崩溃或kill浏览器

答案 2 :(得分:0)

虽然您可以利用Javascript来捕获浏览器的关闭事件,但除非您想要快速执行某些操作并且没有寻求任何关于其成功的反馈,否则您可能希望尝试不同的方法。

根据您的上述说法,您似乎尝试将给定的事务归类为中止,并且您可以通过跟踪数据库后端中的不同事务阶段来实现。为给定的交易设置不同的阶段,然后将其设置为“已中止”,如果它即将被处理并且已在该阶段挂起一段时间。

答案 3 :(得分:0)

  

在PHP内部维护连接状态。有3个   可能的状态:

     

0 - 正常   1 - 中止   2 - 超时

     

当PHP脚本运行时   通常,NORMAL状态是活动的。如果远程客户端断开连接   ABORTED状态标志已打开。远程客户端断开连接   通常由用户按下STOP按钮引起。如果是PHP强加的   命中时间限制(参见set_time_limit()),TIMEOUT状态标志为   打开了。

This page我会回答你的问题。

答案 4 :(得分:0)

Aleks G 建议的方法是最好的 - 但是,作为次要措施,您可以在浏览器和服务器之间引入某种“心跳”。 例如,在指定的时间间隔内发出AJAX请求,让服务器知道用户“活着”(页面在他的浏览器中打开)。

但是,我再说一遍,这只能作为辅助措施使用,不能依赖它来设置交易状态。没有明确的方法可以知道用户/浏览器是否“仍在那里”。