2011-12-30 6 views
1

データをセッション状態に保存したい。ユーザーがフォーム認証で初めてログインしたときにこのデータを保存する必要があります。このセッション状態変数は、フォーム認証チケットの有効期限と同じ有効期限にする必要があります。これら2つが同期していることを確認する方法はありますか?セッション状態にデータを保存し、Froms認証セッションとの同期を維持する

+0

いつでも両方をチェックすることができます。たとえば、セッションデータを読み取る必要があるたびに、(SessionDataが存在する&& UserIsLogedOn)かどうかをチェックします。 – Aristos

+0

ありがとうございます。私が保護したいデータは、ユーザーのパスワード(既存のWebサービスなので、私は選択肢がありません)であり、セッション認証がフォーム認証チケットに安全であると思いました。私はこれらの同期の問題を持っていないので、あなたはそれを格納するための良い場所を考えることはできませんできますか? –

+0

セッション状態が安全ではありません!セッション状態のクッキーが盗まれてセッションを取得する可能性があります。 – Aristos

答えて

3

これらの2つが同期していることを確認する方法はありますか?

両方とも、同じ値に設定できるweb.configのタイムアウト値があります。今ここであなたの問題が始まるかもしれないと言われています。フォーム認証クッキーには、セッションが有効ではなく、スライドの有効期限が設定されている場合があります。 2つのタイムアウト値を一致させる場合は、認証クッキーのこのスライディングの有効期限を無効にしてください。それはほんの始まりです。セッションの場合は、Off、InProc、StateServer、SqlServerのどれを格納するかを選択できます。

オフ(個人的に私が使用しているもの)を使用すると、ASP.NETセッションは無効になり、基本的にセッションはありません。

InProc(デフォルト値)に設定すると、セッションはメモリに保存されます。 IISがさまざまな状況でAppDomainをリサイクルすることを決めた場合を除いて、一定のCPU /メモリのしきい値に達していない期間...これは、セッションがメモリに格納され、AppDomainがWebサーバーによってアンロードされた場合このセッションに格納されているすべてのものが失われますが、明らかに認証Cookieは引き続き有効です。

StateServerとSQLServerには、Webサーバーのメモリに情報が保存されず、AppDomainがリサイクルされても生き残ることができる、2つの異なるプロセス外セッション保存モードがあります。

基本的にまとめると、ASP.NETセッションライフサイクルとASP.NETフォーム認証のCookieライフサイクルを信頼性の高い方法で同期させることは非常に困難です。私はASP.NETセッションをまったく使用しないことでこの問題を解決します。

関連する問題