MVC4 WebSecurity.CurrentUserId 返回 -1,而 User.Identity.Name 仍然
本文关键字:User Identity Name 仍然 WebSecurity CurrentUserId 返回 MVC4 | 更新日期: 2023-09-27 18:31:36
我注意到,当用户登录WebSecurity.CurrentUserID
一段时间后将返回-1,这将返回用户登录屏幕。 在我的登录屏幕中,我有一个部分说
if(User.Identy.IsAuthenticated){
@Html.ActionLink("Dashboard", "Index", "Dashboard");
}
在调试问题时,Web 安全函数返回 -1,但User.Identity
显示为已通过身份验证。为什么会有区别,我们如何才能让它们相同?
谢谢克雷格
WebSecurity.CurrentUserId
属性是只读的。它不能通过代码更改。该属性用于在 WebSecurity 数据库中标识用户配置文件表和成员资格表中的用户。如果未在 Web 应用程序中配置这些表中的任何一个,则将返回 -1。
假设您已在数据库中配置了简单成员资格提供程序,则应该具有以名称 aspnet_ 或 webpages_ 开头的表(假设您尚未重命名它们)。这是网络安全检查值的地方。此外,请确保您使用的是与 SimpleMembership 提供程序关联的方法。
查看此文章
希望这有帮助!如果没有,我一定会愿意进一步帮助您!
我也遇到了这个问题。它似乎与您的 MVC 应用程序重新启动(随机发生)有关。此时会话有时会消失,同时WebSecurity.CurrentUserId
设置为 -1(让我怀疑此值存储在会话中)。但是,身份验证不是基于会话中保留的数据,应用程序仍然知道您已登录。我相信 MVC 注意到了这一点并立即重新创建所有必要的 cookie。但是,在应用程序重新启动后的第一个操作期间,这些操作仍然不可用(与登录相同)。
我的一位同事发现,这往往发生在应用程序池重新启动时(而不是应用程序本身重新启动)。在他的特殊情况下,这是由于此应用池的内存限制较低引起的(但默认情况下不应设置,因此通常内存限制不会成为应用程序池重新启动的原因)。