Implemented raising of Session_OnEnd event, refactoring
authorKonstantin Triger <kostat@mono-cvs.ximian.com>
Sun, 7 Jan 2007 16:56:14 +0000 (16:56 -0000)
committerKonstantin Triger <kostat@mono-cvs.ximian.com>
Sun, 7 Jan 2007 16:56:14 +0000 (16:56 -0000)
svn path=/trunk/mcs/; revision=70595

mcs/class/System.Web/System.Web.SessionState_2.0/ChangeLog
mcs/class/System.Web/System.Web.SessionState_2.0/SessionStateModule.cs

index 50a1f882fdf152549055e25a774bc956f8910e3f..379616dcdffd4ccd382b53c8cca82ef4c663282b 100644 (file)
@@ -1,3 +1,8 @@
+2007-01-07  Konstantin Triger <kostat@mainsoft.com>
+
+       * SessionStateModule.cs: Implemented raising of Session_OnEnd event,
+               refactoring.
+
 2006-12-27  Konstantin Triger <kostat@mainsoft.com>
 
        * SessionIDManager.cs: Pass config to SessionStateModule.IsCookieLess.
index 48ebd3aa514e6d0e66484062ddbd211d8827a121..e9cf91057fba6a5d78858e6fe0f757f82c273691 100644 (file)
@@ -91,6 +91,10 @@ namespace System.Web.SessionState
                }
 
                public void Dispose () {
+                       app.BeginRequest -= new EventHandler (OnBeginRequest);
+                       app.AcquireRequestState -= new EventHandler (OnAcquireRequestState);
+                       app.ReleaseRequestState -= new EventHandler (OnReleaseRequestState);
+                       app.EndRequest -= new EventHandler (OnEndRequest);
                        handler.Dispose ();
                }
 
@@ -231,7 +235,10 @@ namespace System.Web.SessionState
                                storeData = handler.CreateNewStoreData (context, config.Timeout.Minutes);
                        }
 
-                       SessionSetup (sessionId, isNew, isReadOnly);
+                       container = CreateContainer (sessionId, storeData, isNew, isReadOnly);
+                       SessionStateUtility.AddHttpSessionStateToContext (app.Context, container);
+                       if (isNew)
+                               OnSessionStart ();
                }
 
                void OnReleaseRequestState (object o, EventArgs args) {
@@ -272,10 +279,10 @@ namespace System.Web.SessionState
                                else {
                                        handler.ReleaseItemExclusive (context, container.SessionID, storeLockId);
                                        handler.RemoveItem (context, container.SessionID, storeLockId, storeData);
+                                       if (supportsExpiration)
+                                               SessionStateUtility.RaiseSessionEnd (container, this, args);
                                }
                                SessionStateUtility.RemoveHttpSessionStateFromContext (context);
-                               if (supportsExpiration)
-                                       SessionStateUtility.RaiseSessionEnd (container, o, args);
                        }
                        finally {
                                container = null;
@@ -338,22 +345,22 @@ namespace System.Web.SessionState
                                state.AutoEvent.Set ();
                }
 
-               void SessionSetup (string sessionId, bool isNew, bool isReadOnly) {
-                       container = new HttpSessionStateContainer (
+               HttpSessionStateContainer CreateContainer (string sessionId, SessionStateStoreData data, bool isNew, bool isReadOnly) {
+                       return new HttpSessionStateContainer (
                                sessionId,
-                               storeData.Items,
-                               storeData.StaticObjects,
-                               storeData.Timeout,
+                               data.Items,
+                               data.StaticObjects,
+                               data.Timeout,
                                isNew,
                                config.Cookieless,
                                config.Mode,
                                isReadOnly);
-                       SessionStateUtility.AddHttpSessionStateToContext (app.Context, container);
-                       if (isNew)
-                               OnSessionStart ();
                }
 
                void OnSessionExpired (string id, SessionStateStoreData item) {
+                       SessionStateUtility.RaiseSessionEnd (
+                               CreateContainer (id, item, false, true),
+                               this, EventArgs.Empty);
                }
 
                void OnSessionStart () {