【问题标题】:MembershipUser.IsOnline is true even after logoutMembershipUser.IsOnline 即使在注销后也为真
【发布时间】:2012-05-15 02:56:36
【问题描述】:

我目前正在使用 Visual Studio 2010 创建一个网站。我正在使用 SQL Server 2008 中的默认成员身份架构进行用户身份验证。现在我面临以下问题。

当用户注销时,该用户的 members.IsOnline 属性应设置为 false。然而,它没有发生;该用户的membership.IsOnline 属性仍然为真。

我正在使用 LoginStatus 控件向用户提供注销链接。

我已尝试关注User.IsOnline = true even after FormsAuthentication.SignOut()。但没有结果。

【问题讨论】:

    标签: asp.net membership logout


    【解决方案1】:

    AFAIK,FormsAuthentication.SignOut 与会员系统没有直接关系。因此,您必须按照您在问题中提到的那样手动更新LastActivityDate。并使用Membership.UserIsOnlineTimeWindow 而不是-2。

    来自 MSDN

    在调用期间检查 UserIsOnlineTimeWindow 属性值 到 GetNumberOfUsersOnline。如果用户的 LastActivityDate 是 大于当前日期和时间减去 UserIsOnlineTimeWindow 以分钟为单位的值,然后考虑用户 在线的。您可以确定是否考虑会员用户 使用 MembershipUser 类的 IsOnline 属性在线。

    MembershipUser user = Membership.GetUser(false);
    
    FormsAuthentication.SignOut();
    
    user.LastActivityDate = DateTime.UtcNow.AddMinutes(-(Membership.UserIsOnlineTimeWindow + 1));
    Membership.UpdateUser(user);
    

    【讨论】:

    • 感谢您提供更多信息。这将有助于我采取进一步的方法。
    • 此解决方案适用于 SqlMembershipProvider,但不适用于“Microsoft ASP.NET Universal Providers 1.1”。使用“Microsoft ASP.NET Universal Providers 1.1”时,调用 UpdateUser 将使用 DateTime.UtcNow 覆盖 LastActivityDate 属性。
    • @doitgood 绝对你是对的,那是我的错,在我看来,这不仅仅是关于通用提供程序,而是默认的 SqlMembershipProvider 以及它绝对是必需的。谢谢你的评论:)
    • 根据 Microsoft 文档,LastActivityDate“应该”可以使用您提供的代码进行更新。这可能是“通用提供者”中的一个错误。此链接来自 MS 文档,说明 LastActivityDate 为 RW:msdn.microsoft.com/en-us/library/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多