【问题标题】:Automatically update online/offline member status using asp.net and c#使用asp.net和c#自动更新在线/离线会员状态
【发布时间】:2015-07-22 09:37:26
【问题描述】:

我使用一个表(我们称之为 T_User),其中包含描述每个用户的字段。其中一个字段是 "Status" ,每次用户在我的网站上登录(或者如果他在连接到我的网站时已经登录)时,该字段都会更新为 true,并且在用户离开时自动更新为 false页面(无论用户是否注销)。 我想出的这个问题的解决方案是使用 Quartz.net 创建一个调度程序,它将检查在线用户的所有 session_id 以确定会话是否处于活动状态!我的问题是我找不到确定会话是否存在的有效方法!那么如何获取每个用户的会话状态呢?有没有更好的方法来实现这个“功能”? 谢谢你的回答

【问题讨论】:

    标签: c# asp.net offline member status


    【解决方案1】:

    我的项目需要类似的东西。我使用SignalR 查看我的网络应用程序上有多少当前连接。

    例子:

    集线器

    [HubName("trackingHub")]
    public class TrackingHub : Hub
    {
        public void SendCount()
        {   // Send the ConnectedUsers count to the caller
            Clients.All.count(SignalRConnectionHandler.ConnectedUsers.Count);
        }
    
        public override Task OnConnected()
        {
            // When a user connects, add him to the HashSet
            SignalRConnectionHandler.ConnectedUsers.Add(Context.ConnectionId);
            SendCount();
            return base.OnConnected();
        }
    
        public override Task OnDisconnected(bool stopCalled)
        {
            // When a user disconnects, remove him to the Hashset
            SignalRConnectionHandler.ConnectedUsers.Remove(Context.ConnectionId);
            SendCount();
            return base.OnDisconnected(stopCalled);
        }
    
        public override Task OnReconnected()
        {
            // When a user reconnects, Check if he is already in the Hashset, if not add him back in.
            if (!SignalRConnectionHandler.ConnectedUsers.Contains(Context.ConnectionId))
            {
                SignalRConnectionHandler.ConnectedUsers.Add(Context.ConnectionId);
            }
    
            return base.OnReconnected();
        }
    

    连接处理程序

    public static class SignalRConnectionHandler
    {
        public static HashSet<string> ConnectedUsers = new HashSet<string>();
    }
    

    查看

     $(function () {
            var hub = $.connection.trackingHub; 
    
            hub.client.count = function(count) {
                $('#count').html(count); // Append the connected users count to the page
            }
    
            // Connect the user to the Hub
            $.connection.hub.start().done(function () {
                console.log("connected");
    
            });
        });
    

    如果您在_layout 中添加hub.start()ConnectedUsers 哈希现在将包含所有连接的用户 ID。由于我们可以覆盖Hub 上的某些方法,因此我们可以在有人连接和断开连接时设置ConnectedUsers

    如您所见,我将所有内容都存储在 HashSet&lt;T&gt; 中,但您可以将其存储在数据库等中。(请注意,将其存储在内存中,如上所示,一旦 IIS 回收,对象将丢失)

    【讨论】:

    • 是否有其他方法不使用 SignalR,因为我无法真正配置如何使这项工作......
    • 确实没有可靠的结果。您如何知道客户端是否已断开连接?你有什么问题。我也许能帮上忙。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-20
    • 1970-01-01
    • 1970-01-01
    • 2020-07-02
    • 2010-11-19
    • 1970-01-01
    相关资源
    最近更新 更多