当User.Identity.Name仍然有效时,MVC4 WebSecurity.CurrentUserId返回-1

时间:2013-09-17 20:43:12

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

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

if(User.Identy.IsAuthenticated){

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

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

由于 克雷格

2 个答案:

答案 0 :(得分:0)

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

假设您已配置SimpleMembershipProvider您的数据库中的表格应该以名称 aspnet _ 网页_ 开头(假设您尚未重命名)。这是WebSecurity检查值的地方。还要确保使用与SimpleMembershipProvider相关联的方法。

Check out this article

希望这有帮助!如果不是,我一定会愿意进一步帮助你!

答案 1 :(得分:0)

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


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