1. ホーム
  2. asp.net-mvc

[解決済み] ASP.NET MVCにおけるセッション変数

2022-04-22 12:57:31

質問

私は、ユーザーが特定のリクエストを行うウェブサイト内の複数のウェブページを閲覧できるようにするウェブアプリケーションを作成しています。ユーザーが入力したすべての情報は、私が作成したオブジェクトに格納されます。問題は、このオブジェクトにWebサイトのどこからでもアクセスできるようにする必要があるのですが、これを実現する最善の方法がよくわかりません。セッション変数を使用するのが一つの解決策であることは知っていますが、asp .net MVCでそれをどのように使用するのかわかりません。また、どこでセッション変数を宣言すればよいのでしょうか?他の方法はないのでしょうか?

解決方法は?

物事が本当にセッション状態に属しているかどうかを考えたいと思うでしょう。 これは私自身が時々やっていることで、全体的に強く型付けされた素晴らしいアプローチですが、セッションコンテキストに物事を置くときには注意する必要があります。しかし、セッションコンテキストにものを置くときには注意が必要です。あるユーザーのものだからといって、すべてがそこにあるべきとは限りません。

global.asax で OnSessionStart イベントをフックします。

void OnSessionStart(...)
{
    HttpContext.Current.Session.Add("__MySessionObject", new MySessionObject());
}

HttpContext.Current プロパティ != null のコード内の任意の場所から、そのオブジェクトを取得することができます。私はこれを拡張メソッドで行っています。

public static MySessionObject GetMySessionObject(this HttpContext current)
{
    return current != null ? (MySessionObject)current.Session["__MySessionObject"] : null;
}

この方法では、コード内で

void OnLoad(...)
{
    var sessionObj = HttpContext.Current.GetMySessionObject();
    // do something with 'sessionObj'
}