2016-07-06 13 views
0

私はWebMatrixアプリケーションを持っています。を取得してUserIDを取得しています。場合によってはUserIdを返し、それ以外の場合は-1を返します。私はログインページを持っているので、アプリケーションにログインした人のUserIdが得られるはずです。ここでWebSecurity.GetUserID(HttpContext.Current.User.Identity.Name)が必ずしも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

あなた(またはあなたのユーザー)はただsession timeout(つまりWebSecurity.CurrentUserId = -1)を経験している可能性があります。その場合、タイムアウトしたユーザーをログインページにリダイレクトすることをお勧めします。タイムアウト値を決定/設定し、必要に応じてテストするには、フォーム認証、Windows認証、または(ick)サーバーセッションを使用しているかどうかを判断する必要があります。

あなたのユーザーにとって最も良いことは、AuthorizeAttribute/AuthorizeCoreを使用し、HandleUnauthorizedRequestメソッドを使用してセッションの有効期限が切れたときにログインページに戻すことです。

+0

サンプルコードはありますか? – tnbumbray

+0

[良いサンプルはこちら](http://stackoverflow.com/a/13292334/6415885) – SqlOnly

関連する問題