WebSecurity.GetUserID(HttpContext.Current.User.Identity.Name)并不总是返回UserID

时间:2016-07-06 18:58:42

标签: sql-server security razor webmatrix

我有WebMatrix个应用,我正在使用WebSecurity.GetUserId(Http.Current.User.Identity.Name)来抓取UserID。有时它返回UserId,然后返回-1。因此,我有一个登录页面,它应该是登录到应用程序的人的UserId

这是我的代码:

    var UserId = WebSecurity.GetUserId(HttpContext.Current.User.Identity.Name);
    var User = WebSecurity.CurrentUserName;
    var UserEmail = WebSecurity.CurrentUserName;
    var dbApp = Database.Open("ApplicationServices"); 
    var selectUser = "SELECT UserId, UserName, Location FROM LocationTable, UserTable WHERE (UserId) = (@0) AND (UserLocation) = (Id)";  
    var person = dbApp.QuerySingle(selectUser, UserId);  

为什么它不一致?

1 个答案:

答案 0 :(得分:1)

您(或您的用户)可能只是遇到session timeout(即WebSecurity.CurrentUserId = -1),在这种情况下,您希望将用户重定向回登录页面一次他们已经超时了。您需要确定是使用表单身份验证,Windows身份验证还是(ick)服务器会话以确定/设置超时值,并根据需要进行测试。

对您的用户而言,最好的办法是使用AuthorizeAttribute/AuthorizeCore及其HandleUnauthorizedRequest方法在会话到期时将其重定向回您的登录页面。