1

私は MVC 5 ベースの Web プロジェクトを持っており、HttpSessionStateWrapperクラスを使用してセッション状態を操作しています。基本的に、ユーザー固有のデータをセッション状態に保存します。これが私のコードです(コンテキストなし):

public class Util
{
        private HttpSessionStateWrapper _session;

        public Util()
        {
            _session = new HttpSessionStateWrapper(HttpContext.Current.Session);
        }

        public T Get<T>(string key) where T : class
        {
            var sessionedObject = (T)_session[key];
            if (sessionedObject != null)
            {
                Logger.Instance.LogDebug("Object returned from session. Session Timeout=" + _session.Timeout.ToString() + " Session Id=" + _session.SessionID);
                return sessionedObject;
            }
            return null;
        }
}

クラスのインスタンスはUtil一度作成され、別のシングルトン タイプの静的プロパティとして機能します。そして、私はここにいくつかのログを記録しています。したがって、セッション状態のタイムアウトは、Web.config を介して 1 分に設定されます。しかし、10分以内でもセッションが終了することはないようです。

さらに、各リクエストSessionIdは新しいことに注意しましたが、セッションからデータを取得するとき、IDは最初に生成されたセッションIDと同じです。 Session Endイベントも私のために発生したことはありませんが、発生Session Startします。ここにいくつかのログがあります:

2013-11-11 04:27:38.2578 App Starting 

2013-11-11 04:27:38.6641 Session onStart. Id=0x545pyzbt4e1vzh1h1rr5d5 
2013-11-11 04:27:38.6641 Object returned from session. Session Timeout=1 Session Id=0x545pyzbt4e1vzh1h1rr5d5 

2013-11-11 04:28:06.5263 Session onStart. Id=ujuxasiz5hvzbv15gbvuuxt3  
2013-11-11 04:28:06.5263 Object returned from session. Session Timeout=1 Session Id=0x545pyzbt4e1vzh1h1rr5d5 

2013-11-11 04:29:00.3432 Session onStart. Id=jgwmmh1ubokxn3kfadevfnph 
2013-11-11 04:29:00.3432 Object returned from session. Session Timeout=1 Session Id=0x545pyzbt4e1vzh1h1rr5d5 

2013-11-11 04:39:25.7919 Session onStart. Id=0mocujzp4tbwwvgnkx1mn0qi 
2013-11-11 04:39:25.7919 Object returned from session. Session Timeout=1 Session Id=0x545pyzbt4e1vzh1h1rr5d5 

編集:返信してくれてありがとう!このようなものを深くデバッグする時間がないため、セッション状態の使用をまったく拒否し、HttpContext.Current.Itemsコレクションを使用することにしました。それは私のニーズに応えます

4

3 に答える 3

1

セッションに何も保存していないため、リクエストごとに新しいセッションを取得すると思います。

以下を Global.asax.cs に追加してみてください。

protected void Session_Start() 
{ 
    // Since .NET 2.0 ASP.NET will create a new session for each request 
    // unless some data is stored in the session, so here we go... 
    Session["dummy"] = 0; 
}
于 2013-11-11T09:59:37.670 に答える