2012-12-28 13 views
5

MVC4で私の最初のuberの小さなwebappを作成しました。これまではレイアウトアプリケーションを使ってWebアプリケーションをレイアウトし、いくつかのビューコントローラとモデルを追加してユーザーを登録し、ユーザーにログインさせました。ASP.NET MVC4セッション状態ストアのユーザー名

ユーザーがログイン/登録すると、そのユーザー名がセッションに保存されます。セッションからこのプロパティを読み込んで、ユーザーがログインしているかどうかを判断します。

これは悪い習慣ですか?私はRESTfulでステートレスなWebアプリケーションについてたくさん読んでいます。私は私のセッションで何も保存してはいけないと感じています。

@if (string.IsNullOrEmpty(Session["User"] as string)) 
{ 
    <dl> 
     <dt><a href="/Account/Register">Register</a></dt> 
     <dt><a href="/Account/Login">Login</a></dt> 
    </dl> 
} 
else 
{ 
    <dl> 
     <dt><a href="/Account/ShowAccount/@Session["User"]">@Session["User"]</a></dt> 
     <dt><a href="/Account/Logout">Log out</a></dt> 
    </dl>  
} 

Q1:これは悪い習慣ですか?

質問2:これは「ハックセーフ」ですか?つまり、現在のセッションをハックし、ログインをバイパスするためにSession ["User"]に値を保存するのは簡単ですか?

+4

ユーザーが既にログインしているかどうかを確認するために組み込みのASP.NETメンバーシップ機能を使用するだけではどうですか? –

+0

私はちょっと新しいことを強調しているのを忘れていました。これまでに非常に多くのことを学んだが、まだその部分を見つけていない。私はそれをチェックしますが、質問に対する答えの後でまだ不思議です。私は後でセッションに物事を格納する必要があると思うでしょうし、上記のように問題なく使用できるかどうかを知りたいと思います。 – bas

答えて

7

のご質問にお答えするには:

1)一般的には、セッション状態を使用する限り、あなたはあなたのアプリケーションのためにそれを必要としますが、パフォーマンスとスケーラビリティにその意味を理解し、悪い習慣ではありません。しかし、あなたのケースでは、格納する必要があるのはユーザーの名前だけなので、アプリケーションがASP.Netメンバーシップ・プロバイダーを使用している場合は本当に必要ありません。この情報は、MVCControllerのユーザー・プロパティーで使用できますベースクラス:

var username = User.Identity.Name 

セッションデータを保存することができる3つの方法があります。それはそれは別のサーバーに出力処理を格納しているアプリケーションのプロセス、「は、StateServer」に格納された「インプロセス」、および"SQLServer"は、SQL Serverデータベースに格納されます。どちらが使用する必要があるかは、サーバーファームを使用している場合、セッションが耐久性が必要な場合(つまり、マシンを再起動しても問題ない場合)、アプリケーションのパフォーマンス要件(StateServerとSQLServerのパフォーマンスがInProcより劣る場合)によって異なります。詳細情報はhere

2)セッションデータを保護するために使用する必要があります。 SSL(HTTPS)経由で送信されるデータは完全に暗号化され、ヘッダーが含まれます(したがってCookie)。セッションハイジャック攻撃を防止する方法に関する良い説明はfound here.

+0

お二人に感謝します!私は今ほとんどの作業アプリケーションを持っています:) – bas

関連する問題