我想在用户关闭浏览器时从数据库中删除记录。我要删除的记录属于关闭浏览器或注销的用户。我在全球范围内编写此代码,但它不起作用。有谁能够帮我。 注意:我想删除具有log outed user用户名的记录。 非常感谢你 全球代码:
void Session_End(object sender, EventArgs e)
{
string connStr = ConfigurationManager.ConnectionStrings["dbconn"].ConnectionString;
SqlConnection sqlconn = new SqlConnection(connStr);
SqlCommand sqlcmd = new SqlCommand("delete ChatRoomList where UserName=@UserName", sqlconn);
sqlcmd.Parameters.AddWithValue("@UserName", (string)Session["User"]);
sqlconn.Open();
sqlcmd.ExecuteNonQuery();
sqlconn.Close();
}
答案 0 :(得分:1)
没有可靠的方法来实现这一目标。 Session_End
事件只会触发进程内会话状态存储,触发点将是会话到期,这与浏览器关闭或用户注销不同。
因此,在您的情况下,您可以在会话实际超时时观察事件(如果您有注销链接,那么您可以使用Session.Abandon
强制会话到期)
还有一些其他方法,例如向服务器发出AJAX调用以告知用户已注销(或关闭浏览器窗口),它们可能会为您提供更好的结果,但同样不是100%可靠。我能想到的最可靠的方法是拥有自己的计时器 - 即从浏览器端定期ping服务器(使用AJAX调用),并且当在特定超时值内未收到ping时,假设用户会话已死/结束。
答案 1 :(得分:0)
它适用于IE
window.onbeforeunload = function (event) {
if (((window.event.clientX || event.clientX) < 0) || ((window.event.clientY || event.clientY) < 0)) // close button
{
//call here you you jQuery function to delete either page method, web service or http
}
if ((window.event.clientX < 0) || (window.event.clientY < 0)) // close button
{
//call here you you jQuery function to delete either page method, web service or http
}
else if (window.event.altKey == true || window.event.ctrlKey == true) // ALT + F4
{
//call here you you jQuery function to delete either page method, web service or http handler
}
else // for all other unload events
{
}
}
});