2011-10-22 5 views
0

FormsAuthenticationを使用してユーザーを登録およびログオンするカスタムメソッドを使用するこのアプリケーションがあります。これがホストされているサーバーには、15分ごとにセッションを再開するポリシーがあり、その時にすべてのユーザーがログアウトします。ユーザーをlogginするコードは次のとおりです。作成したフォームクッキー付きと基本的にユーザーがパスワードをハッシュ化されて、私は[ログイン]ボタンまたはユーザ名を表示するには、次のロジックを使用して、私の認証データ、とセッションが再開したときにユーザーがログアウトするのはなぜですか?

var user = this.accountRepo.GetUser(id); 

// Create the forms authentication cookie 
var cookieValue = user.name; 
HttpCookie cookie = FormsAuthentication.GetAuthCookie(cookieValue, true); 

// Dercrypt the cookie 
FormsAuthenticationTicket ticket = FormsAuthentication.Decrypt(cookie.Value); 

// Create a new ticket with the desired data 
FormsAuthenticationTicket newTicket = new FormsAuthenticationTicket 
             (
              ticket.Version, 
              ticket.Name, 
              ticket.IssueDate, 
              DateTime.Now.AddYears(1), 
              true, 
              user.Authentication 
             ); 
// Update the cookies value 
cookie.Value = FormsAuthentication.Encrypt(newTicket); 
Response.Cookies.Set(cookie); 

accountRepo.Login(user); 

@{ 
    var accountRepo = new AccountRepository(); 
    var user = accountRepo.GetCurrentUser(); 
} 

@if(user != null && user.LoggedIn) { 
    <div>@Html.ActionLink(Context.User.Identity.Name + " - Logout", "LogOff", "Account", null, new { @class = "logout_link" })</div> 
} 
else 
{ 
    @Html.ActionLink("Login", "Login", "Account", new { returnUrl = Request.Url.AbsoluteUri }, new { @class = "login_link" }) 
} 

そして "GETCURRENTUSER()" メソッドということである。

var cookie = HttpContext.Current.Request.Cookies[FormsAuthentication.FormsCookieName]; 

if (cookie != null) 
{ 
    FormsAuthenticationTicket ticket = FormsAuthentication.Decrypt(cookie.Value); 

    return db.Users.SingleOrDefault(u => u.Authentications.Equals(ticket.UserData, StringComparison.CurrentCultureIgnoreCase)); 
} 

return null; 

は、私がここで何かが足りないのですか?このコードでは、セッションが再開した場合、ユーザーはログインしたままにしておく必要があります。

ありがとうございます。

+6

うわー、そんなにここで間違っている私はどこから始めるべきか知らない。あなたのビューでリポジトリをインスタンス化する??? Eeeeeevil。問題は、セッションが失われたときにcookienameが変更され、新しいセッションが生成されることです。ユーザーのパスワードをクッキーに保存すると、たとえ暗号化されハッシュされていても、悪い悪い悪い考えです。 –

+0

それについて教えてください、それは私とサーバーに対して強硬でした – FelixMM

+0

これはひどいことではありませんが、これはちょっとしたコードですが、あなたはリファクタリングできるはずです。リファクタリングに関するヘルプが必要な場合は、さらに質問を投稿してください。これは、これを維持するか、単に読む必要があるかもしれない人々にとって不公平です。 –

答えて

0

Mystere Manと同様です。セッションが再起動されるたびにCookie名が再生成されていたので、以前とは異なる名前のCookieが検索されていました。私を助けたあなたのすべての心の平和のために

、及びそのない「悪」ように、将来的にこのアプリをサポートする開発者のために、私はもうそれをリファクタリング:P

関連する問題