确定用户“;叶子”;ASP.NET中的页面/站点
本文关键字:站点 NET ASP 用户 叶子 | 更新日期: 2023-09-27 18:29:50
如果有人要离开页面,我如何调用数据库存储过程?例如,我有一种购物车,当人们向购物车添加项目时,它必须被锁定,直到保存,但如果您打开第页,项目在数据库中保留,如何避免?如果用户关闭页面而不保存,如何使项目无保留?感谢
免责声明:以下建议了问题的解决方案,而不是问题。
据我所知,要可靠地处理这样的事情——确保长时间的交叉交易"锁"(或"票证")被释放——唯一的方法就是使用服务定期"释放"(或"清除")项目。
也就是说,不响应"注销"事件,只需在(初始)1小时预订后,从购物车中移除(解锁)尚未购买的物品。
考虑在影响购物车的用户操作后给用户5分钟的延期(二次)预订时间,并通知用户某些商品在购买完成之前只"预订"。(例如,看看航空公司的机票购买网站。)
这可以与结合使用,根据业务规则检测"页面卸载"或"注销"。
快乐的编码。
您可以在global.asax中的Session_End上放置一个处理程序,并在那里进行检查,释放保留的内容。
onbeUnload
示例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
}
为什么要到数据库进行中间操作?为什么不在用户按下保存按钮之前将购物车保存在会话中?这可能会导致应用程序出现性能问题。你能负担得起点击订购每件商品的数据库吗?
为什么不尝试长轮询,您可以使用特定于用户的令牌引发连接,一旦连接被删除,并且在短时间内没有再次引发,您就可以将用户归类为离开站点。