繁体   English   中英

使用ASP.NET和C#自动更新在线/离线会员状态

[英]Automatically update online/offline member status using asp.net and c#

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

我需要一个类似的项目。 我使用SignalR来查看我的Web应用程序上当前有多少个连接。

例:

[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");

        });
    });

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

如您所见,我将所有内容存储在HashSet<T>但是您可以将其存储在DB等中。(请注意,将其存储在上面的内存中,一旦IIS回收,该对象将丢失)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM