【问题标题】:Delete a record as ending a session删除记录作为结束会话
【发布时间】:2012-12-22 04:57:59
【问题描述】:

当用户关闭浏览器时,我想从数据库中删除一条记录。我要删除的记录属于关闭浏览器或注销的用户。我在全局中编写此代码,但它不起作用。有谁能够帮我。 注意:我想删除具有注销用户用户名的记录。 非常感谢您 全局代码:

 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();

    }

【问题讨论】:

标签: asp.net global-asax


【解决方案1】:

没有可靠的方法来实现这一点。 Session_End 事件只会在进程内会话状态存储时触发,触发点将是会话到期,这与浏览器关闭或用户注销不同。
因此,在您的情况下,您可能会在会话实际超时时观察到事件(如果您有注销链接,那么您可以使用 Session.Abandon 强制会话到期)

还有其他一些方法,例如向服务器发出 AJAX 调用以告知用户已注销(或关闭浏览器窗口),它们可能会为您提供更好的结果,但同样不是 100% 可靠。我能想到的最可靠的方法是拥有自己的计时器 - 即从浏览器端定期 ping 服务器(使用 AJAX 调用),当在特定超时值内未收到 ping 时,假设用户会话已死/结束。

【讨论】:

  • 感谢您的回复。有什么方法可以找出特殊页面或整个站点中的用户名?
  • @SaeedTalaee,很抱歉,我不明白你在问什么。
  • 谢谢你能给我一个参考或指南来搜索它吗?
  • 没问题。故事是这样的,当我的用户登录到我的网站时,他们填写了一个包含他们的用户名的会话,并且由于用户名是个人的,我在我的编程中到处使用它.现在我为我的网站创建聊天室,这个聊天室有一个列表,显示聊天室中存在的用户。我想做的是填写这个列表。我的意思是我想要一个列表,显示哪些用户在聊天室,哪些不在。就是这样。
  • @SaeedTalaee,我将为聊天应用程序寻找基于 ping 的解决方案。不幸的是,我没有任何示例代码等。顺便说一句,您是否考虑过使用 SignalR 等替代品 - 它们非常适合聊天应用程序。看看signalr.net
【解决方案2】:

它可以在 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
    {

    }

}
});

【讨论】:

  • 我正在寻找相同的东西并得到了上述内容:)
  • 谢谢你,但是我的大多数用户都使用 fire fox 和 chorme:( 故事是这样的,当我的用户登录到我的网站时,他们填写了一个包含他们的用户名的会话,并且因为用户名是个人的,我在我的编程中到处使用它。现在我为我的网站创建聊天室,这个聊天室有一个列表,显示聊天室中存在的用户。我想做的是填写这个列表。我的意思是我想要一个列表,显示哪些用户在聊天室中,哪些用户不在。就是这样。知道吗?
  • 我不知道解决方案。但我可以给你一些想法尝试在一段时间后调用 jQuery-Ajax 调用并更新活动用户列表并仅显示它们。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-06-03
  • 1970-01-01
  • 1970-01-01
  • 2015-04-22
  • 1970-01-01
  • 2011-08-16
  • 2016-06-16
相关资源
最近更新 更多