C# 关闭浏览器时运行sql查询

C# 关闭浏览器时运行sql查询,c#,javascript,asp.net,C#,Javascript,Asp.net,当用户关闭浏览器时,如何运行sql查询 在asp.net c#中 谢谢。这就像要求某人在万一死亡时一定给你打电话一样。不行。网络不是这样工作的。你能做的最好的事情就是定期与他们保持联系,如果他们没有登记入住,你就认为他们已经死了。这就像要求某人确保在他们死后给你打电话一样。不行。网络不是这样工作的。你所能做的最好的事情就是定期与他们保持联系,如果他们没有报到,就认为他们已经死了。你所能做的最好的事情就是捕捉有人离开你的页面的事件。 浏览器转到新页面或关闭浏览器将触发此操作 然后可以调用特定的ur

当用户关闭浏览器时,如何运行sql查询 在asp.net c#中


谢谢。

这就像要求某人在万一死亡时一定给你打电话一样。不行。网络不是这样工作的。你能做的最好的事情就是定期与他们保持联系,如果他们没有登记入住,你就认为他们已经死了。

这就像要求某人确保在他们死后给你打电话一样。不行。网络不是这样工作的。你所能做的最好的事情就是定期与他们保持联系,如果他们没有报到,就认为他们已经死了。

你所能做的最好的事情就是捕捉有人离开你的页面的事件。 浏览器转到新页面或关闭浏览器将触发此操作

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

另一个可能效果更好的选项是,javascript代码每隔一段时间“ping”一次服务器,以确认用户仍在页面上,如果ping间隔过后没有收到ping,则可以推断用户已离开页面

更多信息也可在此处找到:


如果要开发此功能,我将每隔10-30秒ping一次服务器,并使用“用户联机的最新日期”值更新用户表。

您可以尽最大努力捕获某人离开页面的事件。 浏览器转到新页面或关闭浏览器将触发此操作

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

另一个可能效果更好的选项是,javascript代码每隔一段时间“ping”一次服务器,以确认用户仍在页面上,如果ping间隔过后没有收到ping,则可以推断用户已离开页面

更多信息也可在此处找到:


如果要开发此功能,我会每隔10-30秒ping一次服务器,并使用“用户联机的最新日期”值更新用户表。

为了安全起见,您应该将其放在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"/>


更多信息:

为了安全起见,您应该将其放在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"/>


更多信息:

所以我尝试了一些你们写的想法 但是我通过检查用户cookie是否存在来解决这个问题 每隔几分钟检查一次

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

所以我尝试了一些你们写的想法 但是我通过检查用户cookie是否存在来解决这个问题 每隔几分钟检查一次

无论如何,谢谢你。
希望我能给其他人一些想法。

查看以获取想法。将代码放在global.asax的会话结束事件中如何?查看以获取想法。将代码放在global.asax的会话结束事件中如何?在卸载之前总是有,它不是100%安全的,可以工作,但您可以使用它。这就像在手机上放置一个程序,检查他是否从用户手中掉下来给你发信息。并假设当手机死时会掉下来。@Aristos:事实上,更像是手机出于任何原因离开了用户的手。同样的
beforeunloca
也会工作,因为当用户离开页面并转到其他页面时会触发。当然,总是有
beforeunload
不能100%安全地工作,但是你可以用它。这就像在手机上放置一个程序,检查他是否从用户手中掉下来给你发信息。并且假设当它死了,手机会掉下来。@Aristos:实际上,更像是手机因为任何原因离开了用户的手。同样的方法是在用户离开页面,转到其他页面时触发。除非您通过设置数据创建了会话,否则会话\u End不会启动。您还必须通过在
application\u End
中调用代码来处理应用程序池重新启动、超时或关闭的情况。您可以在application\u End事件中处理该情况。=)除非您通过设置数据创建了会话,否则会话\u End不会启动。您还必须通过在
application\u End
中调用代码来处理应用程序池重新启动、超时或关闭的情况。您可以在application\u End事件中处理该情况。=)