确定用户何时离开" ASP.NET中的页面/站点?

时间:2012-04-02 16:39:19

标签: c# asp.net .net-2.0

如果有人离开页面我怎么能调用数据库存储过程? 例如,我有某种购物车,当人们将商品添加到购物车时,必须先将其锁定直至保存,但如果您翻页,则在数据库中保留商品,如何避免呢?如果没有保存人关闭页面,如何保留未保留的项目? 谢谢

4 个答案:

答案 0 :(得分:2)

你可以在你的global.asax中放置一个处理程序在Session_End上,并在那里检查释放保留的内容。

答案 1 :(得分:2)

免责声明:以下建议解决问题,而不是问题。


我知道可靠处理这样的事情的唯一方法 - 确保释放长交叉事务“锁定”(或“票证”) - 是使用服务来“定期发布“(或”清除“)项目。

也就是说,不是回应“退出”事件,而是在说出(初始)1小时预约之后,从购物车中移除(解锁)尚未购买的物品。

考虑在影响购物车的用户操作之后向用户提供5分钟的延期(次要)预订时间,并且在购买完成之前通知用户某些商品仅“保留”。 (例如,看看航空公司机票购买网站。)

这可以与结合使用其他方法之一来检测“页面卸载”或“注销”,具体取决于业务规则。

快乐的编码。

答案 2 :(得分:1)

<强> onbeforeUnload

示例HTML

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <script language="javascript" type="text/javascript">
        window.onbeforeunload = function (evt) {
            debugger;
            if (confirm('Are you sure to exit')) {
                document.getElementById('<%=btn.ClientID %>').click();
            }
            else
                return false;
        }

    </script>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:Button ID="btn" runat="server" Text="Click for SP" OnClick="btn_Click" />
    </div>
    </form>
</body>
</html>

示例代码背后

protected void btn_Click(object sender, EventArgs e)
{
     //SP Call
}

为什么要去数据库进行中间操作?为什么不在用户按下保存按钮之前保存购物车?这可能会导致应用程序出现性能问题。你能负担得起每个项目的数据库点击订单吗?

答案 3 :(得分:0)

为什么不尝试长时间轮询,你可以使用特定于用户的令牌建立连接,一旦连接断开并且在短时间内没有再次提升,你可以将用户归类为离开网站。