3

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

if(User.Identy.IsAuthenticated){

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

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

谢谢克雷格

4

2 回答 2

0

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

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

看看这篇文章

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

于 2013-09-17T22:09:44.237 回答
0

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


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

于 2014-09-29T12:39:08.800 回答