【问题标题】:MVC4 WebSecurity.CurrentUserId returns -1 while User.Identity.Name is still validMVC4 WebSecurity.CurrentUserId 返回 -1 而 User.Identity.Name 仍然有效
【发布时间】:2014-12-08 22:48:49
【问题描述】:

我注意到当用户登录WebSecurity.CurrentUserID 一段时间后会返回-1,这将使用户返回登录屏幕。在我的登录屏幕中,我有一个部分显示

if(User.Identy.IsAuthenticated){

   @Html.ActionLink("Dashboard", "Index", "Dashboard");
}

在调试问题时,网络安全功能返回 -1,但 User.Identity 显示为已通过身份验证。为什么会有差异?我们如何才能使它们相同?

谢谢 克雷格

【问题讨论】:

    标签: c# asp.net-mvc asp.net-mvc-4


    【解决方案1】:

    WebSecurity.CurrentUserId 属性是只读的。它不能通过代码更改。该属性用于在 WebSecurity 数据库中标识用户配置文件表和成员资格表中的用户。如果您没有在 Web 应用程序中配置这些表中的任何一个,您将返回 -1。

    假设您已经配置了SimpleMembershipProvider 在您的数据库中应该有以名称aspnet_webpages_ 开头的表(假设您没有重命名它们)。这是 WebSecurity 检查值的地方。还要确保您使用的是与 SimpleMembershipProvider 关联的方法。

    Check out this article

    希望这会有所帮助!如果没有,我一定愿意为您提供进一步的帮助!

    【讨论】:

    • 是的,我已经完成了所有这些设置,并且了解静态函数背后的复杂性。此属性确实返回当前登录的用户,但在一些不活动之后,这将返回 -1 并将用户注销,但是我注意到 User.Identity 假定该人仍处于登录状态。
    • 看来您可能从 web.config 中删除了 标签,这意味着您允许任何人匿名。因此 User.Identity 总是会返回 true。尝试添加 让我知道这是否有帮助!
    【解决方案2】:

    I came across this problem too。它似乎与您的 MVC 应用程序重新启动(随机发生)有关。此时会话有时会消失,同时WebSecurity.CurrentUserId 设置为-1(让我怀疑这个值存储在会话中)。但是,身份验证不是基于会话中保存的数据,应用程序仍然知道您已登录。我相信 MVC 会注意到这一点并立即重新创建所有必要的 cookie。但是,在应用重新启动后的第一个操作期间,这些仍然不可用(与登录相同)。


    我的一位同事发现,这往往会在应用程序池重新启动时发生(而不是应用程序本身重新启动)。在他的特殊情况下,这是由于此应用程序池的内存限制过低(但默认情况下不应设置,因此通常内存限制不会导致应用程序池重新启动)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-09-06
      • 2023-04-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多