2011-02-01 1 views
0

こんにちは、データを保存するためにセッションを使用していない場合でもsessionIdを保持しますか?

私はASP.NET MVC 2 Webサイトを構築し、いくつかのデータを現在のユーザー/セッションをバインドする必要がありますしています。次は可能な解決策ですが、ベストプラクティスは何ですか?

  1. GUIDを作成し、それを非表示フィールドに設定すると、データはシェルトンオブジェクト(キャッシュなど)に保存されます。セキュリティは最高です(ユーザーは隠しフィールドの値を変更する可能性があります)。
  2. Session.SessionIdを使用します。私は間違っているセッションに何かを格納する必要がある呼び出しの間に同じSessionIdを維持するために?ここにセキュリティ上の問題があるかどうかわからないのですか?

BestRegards

マイソリューション私は現在のクライアントのGUIDを作成し、フォームの隠しフィールドとしてこれを設定することになりました。しかし私は隠しフィールドを正確にレンダリングするためにいくつかの問題を抱えていました。ASP.NET MVC 2 HiddenField is empty?

+0

あなたは認証を使用していますが、現在認証されているユーザーと何らかの形で関連しているこの「Id」ですか? –

+0

いいえ、認証がありません – Banshee

答えて

2

ウェブが本質的にステートレスであるため、ウェブリクエスト間で状態を維持することは常に困難です。

Cookieに隠されたGuid(または他のシステム一意の識別子)またはセッションIDを使用するかどうかは、どちらも悪用される可能性があります。つまり、「セッション状態」を実装するほとんどのシステムでは、Cookieを使用してシステムを実行します。

セッション状態 'バッグ'の目的は、あなたが言及した目的とまったく同じWebリクエスト間の情報を格納することです。間違っていると感じられるかもしれませんが、非常に一般的に受け入れられているアプローチです。実際のセッションデータではなく、セッションIDだけがクライアントブラウザに格納されていることを覚えておいてください。それはサーバーで保持されています。

+0

ありがとう!そして、TempDataDictionaryはセッションを使用します。セッション時間が稼働するまでデータが保持されている間、TempDataDictionaryは次の要求の後にクリアされます。 TempDataDictionaryはブラウザーにも関連付けられていませんか? – Banshee

+0

@SnowJim:正しいですが、TempDataはコントローラからビューにデータを渡すためのものであり、永続化されません。 – Lazarus

関連する問題