簡體   English   中英

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

[英]MVC4 WebSecurity.CurrentUserId returns -1 while User.Identity.Name is still valid

我注意到,當用戶登錄WebSecurity.CurrentUserID一段時間后將返回-1,這將使用戶返回登錄屏幕。 在我的登錄屏幕中,我有一個部分說

if(User.Identy.IsAuthenticated){

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

在調試問題時,Web安全功能返回-1,但User.Identity顯示為已通過身份驗證。 為什么會有差異,我們怎樣才能讓它們變得相同?

謝謝克雷格

WebSecurity.CurrentUserId屬性是只讀的。 它不能通過代碼更改。 該屬性用於在用戶配置文件表和成員資格表中標識WebSecurity數據庫中的用戶。 如果您的Web應用程序中沒有配置其中一個表,則返回-1。

假設您已配置SimpleMembershipProvider在數據庫中應該有以aspnet_webpages_開頭的表(假設您沒有重命名它們)。 這是WebSecurity檢查值的地方。 還要確保您使用的是與SimpleMembershipProvider相關的方法。

看看這篇文章

希望這有幫助! 如果沒有,我一定會願意進一步幫助你!

我也遇到過這個問題 它似乎與您的MVC應用程序重新啟動(隨機發生)有關。 此時,會話有時會消失,同時WebSecurity.CurrentUserId設置為-1(讓我懷疑此值存儲在會話中)。 但是,身份驗證不是基於會話中保留的數據,並且應用程序仍然知道您已登錄。我相信MVC會注意到這一點並立即重新創建所有必需的cookie。 但是,在應用程序重新啟動后的第一個操作期間,這些仍然不可用(與登錄相同)。


我的一位同事發現,當應用程序池重新啟動時(而不是應用程序本身重新啟動),這種情況往往會發生。 在他的特定情況下,它是由此應用程序池的內存限制較低引起的(但默認情況下不應設置,因此內存限制通常不會導致應用程序池重新啟動)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM