删除记录以结束会话

时间:2013-01-08 10:50:02

标签: asp.net global-asax

我想在用户关闭浏览器时从数据库中删除记录。我要删除的记录属于关闭浏览器或注销的用户。我在全球范围内编写此代码,但它不起作用。有谁能够帮我。 注意:我想删除具有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();

    }

2 个答案:

答案 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
    {

    }

}
});