关闭浏览器时运行sql查询

时间:2014-05-22 04:36:00

标签: c# javascript asp.net

如何在用户关闭浏览器时运行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();
}

感谢。

4 个答案:

答案 0 :(得分:2)

这就像要求某人确保给他们打电话,以防他们死亡。无法做到。 Web不会那样工作。你能做的最好的事情就是定期与他们保持联系,如果他们没有办理登机手续,则认为他们已经死了。

答案 1 :(得分:1)

您可以做到最好来捕捉某人离开您网页的事件。 这将由浏览器转到新页面或关闭浏览器来触发。

然后,可以调用特定的URL,您可以在服务器上注册该事件。我不确定所有浏览器都会接受此事件,如果需要很长时间,浏览器也有可能继续运行。

Intercept page exit event

 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是否存活 每隔几分钟检查一次。

无论如何,谢谢。 希望我给别人一些想法。