【问题标题】:Get number of users online获取在线用户数
【发布时间】:2015-10-14 02:03:23
【问题描述】:

我环顾四周,发现了两种方法:使用数据库表记录用户登录,并在用户注销或会话结束时删除该条目;或使用 Membership.GetNumberOfUsersOnline()。我首先尝试了会员版本,但是当我登录时它显示数字为零(我正在使用基于表单的身份验证,在 Intranet Web 应用程序中使用 AD 并使用 Oracle DB)。

我还创建了一个表,其中包含用户 ID(存储为 aspnet_user 的用户名)、他们的 aspnet_user 用户 ID、登录时间戳和注销时间戳。当用户登录时,我添加一个条目,当用户注销时,我删除该条目。这里的问题是,如果会话结束并调用 Session_End() 事件,我无法访问用户 ID(存储在会话 var 中)以从表中删除正确的条目。

【问题讨论】:

    标签: asp.net .net-3.5 asp.net-membership


    【解决方案1】:

    在会员资格中,它会记录您登录并创建更新会员用户的活动时的某些日期,我认为默认行为是使用该日期...如果您使用的是自定义会员资格提供程序,请确保默认行为是保存。

    或者,如果您想自己滚动,以确定在线用户数量,每次用户执行回发操作时,更新用户记录上的时间,然后创建一个查询以检查相对数量的时间。 Session_ENd 不是确定用户是否在线的完美方法,因为它可能并不总是触发。用户并不总是单击显式注销按钮,因此这也可能不是一个好的指标。但是由于会话是 20 分钟,因此检查过去 20 分钟内发生的活动是登录用户的粗略指标...

    【讨论】:

    • 谢谢布赖恩。当我检查 ora_aspnet_membership 表时,它显示我的上次登录日期为 2013 年 11 月!我不确定为什么会这样,但我想我会在每次有活动时为用户执行数据库表版本并更新条目。我想我需要一个数据库脚本来检查 last_activity 日期/时间是否超过 20 分钟并删除该条目。不知道我是否可以使用非数据库脚本来做到这一点。
    猜你喜欢
    • 2011-10-15
    • 2012-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-21
    • 1970-01-01
    • 2015-09-16
    相关资源
    最近更新 更多