Asp.net MembershipUser.IsOnline即使在注销后也为true

Asp.net MembershipUser.IsOnline即使在注销后也为true,asp.net,membership,logout,Asp.net,Membership,Logout,我目前正在使用VisualStudio2010创建一个网站。我使用SQLServer2008中的默认成员身份模式进行用户身份验证。现在我面临以下问题 当用户注销时,该用户的membership.IsOnline属性应设置为false。然而,它并没有发生;该用户的membership.IsOnline属性仍然为true 我正在使用LoginStatus控件向用户提供注销链接 我试着跟随。但结果一无所获。AFAIK与会员制没有直接关系。因此,您必须按照您在问题中提到的那样手动更新LastActivi

我目前正在使用VisualStudio2010创建一个网站。我使用SQLServer2008中的默认成员身份模式进行用户身份验证。现在我面临以下问题

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

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

我试着跟随。但结果一无所获。

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

来自MSDN

在调用过程中检查UserIsOnlineTimeWindow属性值 获取NumberOfUsersOnline。如果用户的LastActivityDate为 大于当前日期和时间减去 UserIsOnlineTimeWindow值(以分钟为单位),则考虑该用户 在线 的您可以确定是否考虑成员资格用户 使用MembershipUser类的IsOnline属性联机


谢谢你提供更多的信息。这将有助于我采取进一步的方法。此解决方案与SqlMembershipProvider一起使用,但与“Microsoft ASP.NET Universal Providers 1.1”不一起使用。当使用“Microsoft ASP.NET Universal Providers 1.1”时,调用UpdateUser将用DateTime.UtcNow覆盖LastActivityDate属性。@doitgood绝对正确,这是我的错,我认为这不仅仅是关于Universal Providers,而是默认的SqlMembershipProvider,而且它是绝对必需的。感谢您的评论:)根据Microsoft文档,LastActivityDate“应该”可以使用您提供的代码进行更新。这可能是“通用提供者”中的一个bug。此链接来自MS文档,说明LastActivityDate为RW:
MembershipUser user = Membership.GetUser(false);

FormsAuthentication.SignOut();

user.LastActivityDate = DateTime.UtcNow.AddMinutes(-(Membership.UserIsOnlineTimeWindow + 1));
Membership.UpdateUser(user);