2012-01-19 10 views
1

私は自分の認証システムを持っているASP.NET MVC 3アプリケーションを作ろうとしています。私は別のSOの投稿で見つけたthis siteに書かれたいくつかのビットをたどってきました。ユーザーのログイン情報を保存する場所

ページの途中で、ユーザーのログイン情報を保持する短いセッションマネージャーを作成します。私は明らかにこれもやりたいと思っていますが、著者は、これが良いことではなく、これを行う方法が他にもあることを示唆しています。

これはすべてうまくいっていますが、ログイン情報を持続させるためのより良い方法は何ですか?

今のところ、ユーザー固有の情報を頻繁に取り出す必要があるため、ユーザー名、ユーザーID、ログインステータスをセッションに保持しています。ユーザー名は、すぐにアクセスできる - すべてのページのデータベースを照会します。

+0

すべての回答ありがとうございます。私は答えとして1つ以上をマークすることができたらいいと思う。 –

答えて

3

上でセッションを好む、私は自分のアプリケーションのためだけでなくセッションを使用して、それはすべてのシナリオではほぼ正常に動作します。

セッション:

:サーバー上に保存されて

  • ので、ユーザー近いブラウザ

クッキーを失った

  • (誰が、セッションデータを変更することはできません)
  • 最も安全なサーバリソースを消費
    • クライアントブラウザに保存されています(do esn'tは、クライアントPC上と
    • あなたが別のセッション
    • を通してそれを持続することができますので、クッキー、特別なログイン情報をクッキー)を暗号化することをお勧めしますネットワーク(上のアクセス可能なので
    • が少なく安全である)サーバリソースを消費します

    あなたのような問題を抱えている時に一般的に言って、あなたがそれに接続されているシリアル化されたデータを、私はをFormsAuthenticationを使用ASP.Net Caching

  • 1

    だから、病気それはあなたのニーズについての依存クッキーやキャッシュ

    2

    を使用し、ユーザーとのチケットを作成することができるかどうか自問してみてください「というすべてのページにデータベースを再クエリするよりも」 。これはかなりクッキーですが、.NET環境ではうまくサポートされています。

    あなたは「ロール・オン・オーナー」のソリューションについて言及しているので、これは私がこれらの状況で使用しているものです。

    これはをFormsAuthenticationチケットを作成します。

    var authTicket = new System.Web.Security.FormsAuthenticationTicket(1, System.Web.Security.FormsAuthentication.FormsCookieName, DateTime.Now, DateTime.Now + System.Web.Security.FormsAuthentication.Timeout, false, this.Serialize(someObject)); 
    
    var encrypt = System.Web.Security.FormsAuthentication.Encrypt(authTicket); 
    
    var authCookie = new HttpCookie(System.Web.Security.FormsAuthentication.FormsCookieName, encrypt) { HttpOnly = true }; 
    HttpContext.Current.Response.Cookies.Add(authCookie); 
    

    これはチケット情報をつかむ:

    var result = new FormsAuthenticationTicketData((HttpContext.Current.User.Identity as System.Web.Security.FormsIdentity).Ticket.UserData); 
    

    ありクッキーにデータをシリアル化するために、いくつかの方法がありますが、私は入れる前にJSONにそれをシリアル化それはクッキー内にあります(オブジェクトはシリアル化できる必要があります)。

    データを使用するには、データを逆シリアル化するだけです。このチケットで実際に渡したいのは、コントローラから「プライベート」情報を取得するために使用できるデータ、またはAuthorizeAttributeオーバーライドを識別するものです。

    希望に役立ちます!

    関連する問題