我怎样才能找到我的注册用户是否在线?

时间:2015-02-03 14:28:03

标签: c# asp.net session web-config

我们有一个使用ASP.Net开发的学习系统Web应用程序,我们决定为其添加新功能。

我们需要找到OnlineClass中在线的用户。 首先,我认为我们可以在user Status中设置UserTable,在true中设置login状态字段,并在false中提出Session_End global.asax(在timeout = 1 Web Config分钟完成时提出。{。

换句话说,1分钟后用户状态变为false。 在Web Config中,我设置了:

<sessionState mode="InProc" timeout="1"></sessionState>
Global.asax中的

 protected void Session_End(object sender, EventArgs e)
    {
        AccountDefine accountDefine = (AccountDefine)Session["AccountDefine"];
        AccountBL accountBL = new AccountBL();

        if (UserID != null)
        {
            if (accountDefine.AccountID != 0)
            {
                accountBL.SetUserStatusTo(UserID, false);
            }
        }

    }

它有效,但我们发现更大的问题! 在课堂上,当用户必须学习并观看在线Flash课程时,用户必须在页面中待很长时间并阅读和观看!

我们无法使用会话,因为用户需要很长时间才能阅读我们可以set session to 1 minutes更改状态的图书。

现在,我能为这个问题做些什么?是否有其他更好的方法来查找用户状态?

2 个答案:

答案 0 :(得分:0)

您可以做的是向您的用户添加属性:

public DateTime LatestActivity { get; set; }

每当用户做某事时,请登录,请求资源等,设置:

user.LatestActivity = DateTime.Now;

然后,您可以通过调用与

类似的内容获取最近活跃用户的列表
var loggedInUsers = allUsers.Where(
    user => user.LatestActivity > DateTime.Now.AddMinutes(-15));

如果您的用户长时间闲置,您可以使用JavaScript计时器来轮询&#34;保持活动状态&#34;服务器端方法,它只是更新LatestActivity属性。

答案 1 :(得分:0)

将“LastPolled”日期时间列添加到数据库表中。使用window.SetInterval()创建一个javascript函数,每分钟进行一次AJAX调用。然后,服务器端调用可以将状态更新为True,并更新“LastPolled”列。在数据库服务器端,安排SQL Server代理任务将所有条目更新为Status = false,当“LastPolled”值为&gt;从现在开始1分钟。