如何在用户关闭浏览器时运行sql查询 在asp.net c#?
if (browser was closed){
SqlCommand cmd = new SqlCommand("check_if_closed", con);
cmd.CommandType = System.Data.CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@user_id", txtUname.Text);
con.Open();
cmd.ExecuteNonQuery();
}
感谢。
答案 0 :(得分:2)
这就像要求某人确保给他们打电话,以防他们死亡。无法做到。 Web不会那样工作。你能做的最好的事情就是定期与他们保持联系,如果他们没有办理登机手续,则认为他们已经死了。
答案 1 :(得分:1)
您可以做到最好来捕捉某人离开您网页的事件。 这将由浏览器转到新页面或关闭浏览器来触发。
然后,可以调用特定的URL,您可以在服务器上注册该事件。我不确定所有浏览器都会接受此事件,如果需要很长时间,浏览器也有可能继续运行。
window.onbeforeunload = function (e) {
var message = "Your confirmation message goes here.",
e = e || window.event;
// For IE and Firefox
if (e) {
e.returnValue = message;
}
// For Safari
return message;
};
另一个可能效果更好的选项是,你的javascript代码经常“ping”你的服务器以确认用户仍然在页面上,然后你可以推断用户已经离开页面如果没有ping ping间隔过后收到。
更多信息也可以在这里找到:Capture event onclose browser
如果我要开发这个,我会每隔10-30秒ping一次服务器,并用“用户在线的最新日期”值更新用户表。
答案 2 :(得分:1)
为了安全起见,你应该将它放在global.asax中,但这不会在浏览器关闭时直接调用,但你可以肯定它会被调用。它将在会话超时或被放弃时首先被调用。
protected void Session_End(object sender, EventArgs e)
{
SqlCommand cmd = new SqlCommand("check_if_closed", con);
cmd.CommandType = System.Data.CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@user_id", txtUname.Text);
con.Open();
cmd.ExecuteNonQuery();
}
要设置会话超时,请将其放在标记下的web.config中。请注意,超时时间以分钟为单位。
<sessionState mode="InProc" cookieless="true" timeout="1"/>
更多信息:http://msdn.microsoft.com/en-us/library/vstudio/ms178583(v=vs.100).aspx
答案 3 :(得分:0)
所以我尝试过很少人的想法 但我设法解决了这个问题,检查用户cookie是否存活 每隔几分钟检查一次。
无论如何,谢谢。 希望我给别人一些想法。