私は Asp.net (MVC ですが、これはあまり重要ではありません) アプリケーションを開発しています。PostAuthenticateRequest でユーザー プリンシパルと ID を変更するカスタム IHttpModule があります。
ユーザーのログイン時に、認証 Cookie に UserID と UserName を保存しています。ビジネス サービス クラス全体で必要な IUser (DAO およびビジネス オブジェクト レイヤーによって実装され、それぞれ独自の追加メンバーを持つ) があります。ユーザーが何かを望む場合、IUser オブジェクト インスタンス (通常はビジネス オブジェクト レイヤーから) を提供する必要があるため、認証チケットから ID を提供するだけでは十分ではありません。
それで、ログインしたユーザーの IUser データを永続化する方法と場所を考えていますか?
- DB から毎回フェッチしたくない (認証チケットの UserID データに基づく)
- セッションがまだ準備ができていないPostAuthenticateRequest内で作業する必要があるため、セッションに保存できません
- すべての機能をカスタム IHttpModule 内にカプセル化したい
私が見る選択肢:
- キャッシュ
- クッキー
- (セッション) - PostAuthenticateRequest から PostAcquireRequestState イベントに移動し、そこでプリンシパル/アイデンティティを変更しますが、これは避けたいと思います
物事を複雑にしているように見えるプロセスは次のとおりです。
- ユーザーがログインすると、ユーザー データが DB から取得され、後のリクエストのために何らかの方法で永続化されます
- ユーザーがログアウトすると、永続化されたメディアからユーザー データを自動的に削除する必要があります
- ユーザーは自分のプロファイルを変更します。ユーザー データは破棄し、DB からの次の要求で再読み込みする必要があります
これらのすべてを HttpModule によって自動的に処理して (可能であれば)、これらをリセットするのを忘れるという開発者のエラーを排除したくありません。
また、ハードコードされた変数/キーを読み書きし、アプリケーションの他の部分でそれらを操作することも望んでいません。これは、技術的負債を示すだけです。
質問
- 何を提案しますか?
- SO はどのようにリクエスト間でユーザー データを保持しますか?