public void Init(HttpApplication app)
        {
            if (!initialized)
            {
                lock (typeof(RedisSessionStateModule)) {
                    if (!initialized)
                    {
                        redisConfig = RedisSessionStateConfiguration.GetConfiguration();

                        // Add event handlers.
                        app.AcquireRequestState += new EventHandler(this.OnAcquireRequestState);
                        app.ReleaseRequestState += new EventHandler(this.OnReleaseRequestState);
                        app.EndRequest          += new EventHandler(this.OnEndRequest);

                        // Create a SessionIDManager.
                        sessionIDManager = new SessionIDManager();
                        sessionIDManager.Initialize();

                        redisConnection = new RedisConnection(redisConfig.Host, redisConfig.Port);

                        initialized = true;
                    }
                }
            }
        }
        /// <summary>
        /// IHttpModule.Init
        /// </summary>
        /// <param name="app"></param>
        public void Init(HttpApplication app)
        {
            // Add event handlers.
            app.AcquireRequestState += OnAcquireRequestState;
            app.ReleaseRequestState += OnReleaseRequestState;
            app.EndRequest          += OnEndRequest;

            // Create a SessionIDManager.
            sessionIdManager = new SessionIDManager();
            sessionIdManager.Initialize();

            // If not already initialized, initialize timer and configuration.
            if (!initialized)
            {
                lock (LockObject)
                {
                    if (!initialized)
                    {
                        OnInit();

                        // Get the configuration section and set timeout and CookieMode values.
                        Configuration cfg =
                            WebConfigurationManager.OpenWebConfiguration(System.Web.Hosting.HostingEnvironment.ApplicationVirtualPath);
                        SessionStateSection config = (SessionStateSection)cfg.GetSection("system.web/sessionState");

                        Timeout    = (int)config.Timeout.TotalMinutes;
                        CookieMode = config.Cookieless;

                        initialized = true;
                    }
                }
            }
        }
        //
        // IHttpModule.Init
        //
        public void Init(HttpApplication app)
        {
            // Add event handlers.
            app.AcquireRequestState += new EventHandler(this.OnAcquireRequestState);
            app.ReleaseRequestState += new EventHandler(this.OnReleaseRequestState);
            app.EndRequest          += new EventHandler(this.OnEndRequest);

            // Create a SessionIDManager.
            pSessionIDManager = new SessionIDManager();
            pSessionIDManager.Initialize();

            // If not already initialized, initialize timer and configuration.
            if (!pInitialized)
            {
                lock (typeof(LockFreeSessionStateModule))
                {
                    if (!pInitialized)
                    {
                        // Create a Timer to invoke the ExpireCallback method based on
                        // the pTimerSeconds value (e.g. every 10 seconds).

                        pTimer = new Timer(new TimerCallback(this.ExpireCallback),
                                           null,
                                           0,
                                           pTimerSeconds * 1000);

                        // Get the configuration section and set timeout and CookieMode values.
                        Configuration cfg =
                            WebConfigurationManager.OpenWebConfiguration(System.Web.Hosting.HostingEnvironment.ApplicationVirtualPath);
                        pConfig = (SessionStateSection)cfg.GetSection("system.web/sessionState");

                        pTimeout    = (int)pConfig.Timeout.TotalMinutes;
                        pCookieMode = pConfig.Cookieless;

                        pInitialized = true;
                    }
                }
            }
        }
        public void Init(HttpApplication app)
        {
            if (!initialized) {
                lock (typeof(RedisSessionStateModule)) {
                    if (!initialized) {

                        redisConfig = RedisSessionStateConfiguration.GetConfiguration();

                        // Add event handlers.
                        app.AcquireRequestState += new EventHandler(this.OnAcquireRequestState);
                        app.ReleaseRequestState += new EventHandler(this.OnReleaseRequestState);
                        app.EndRequest += new EventHandler(this.OnEndRequest);

                        // Create a SessionIDManager.
                        sessionIDManager = new SessionIDManager();
                        sessionIDManager.Initialize();

                        redisConnection = new RedisConnection(redisConfig.Host, redisConfig.Port);

                        initialized = true;
                    }
                }
            }
        }
        public void Init(HttpApplication app)
        {
            config = (SessionStateSection)WebConfigurationManager.GetSection("system.web/sessionState");

            ProviderSettings settings;

            switch (config.Mode)
            {
            case SessionStateMode.Custom:
                settings = config.Providers [config.CustomProvider];
                if (settings == null)
                {
                    throw new HttpException(String.Format("Cannot find '{0}' provider.", config.CustomProvider));
                }
                break;

            case SessionStateMode.Off:
                return;

            case SessionStateMode.InProc:
                settings = new ProviderSettings(null, typeof(SessionInProcHandler).AssemblyQualifiedName);
                break;

            case SessionStateMode.SQLServer:
                settings = new ProviderSettings(null, typeof(SessionSQLServerHandler).AssemblyQualifiedName);
                break;

            case SessionStateMode.StateServer:
                settings = new ProviderSettings(null, typeof(SessionStateServerHandler).AssemblyQualifiedName);
                break;

            default:
                throw new NotImplementedException(String.Format("The mode '{0}' is not implemented.", config.Mode));
            }

            handler = (SessionStateStoreProviderBase)ProvidersHelper.InstantiateProvider(settings, typeof(SessionStateStoreProviderBase));

            if (String.IsNullOrEmpty(config.SessionIDManagerType))
            {
                idManager = new SessionIDManager();
            }
            else
            {
                Type idManagerType = HttpApplication.LoadType(config.SessionIDManagerType, true);
                idManager = (ISessionIDManager)Activator.CreateInstance(idManagerType);
            }

            try {
                idManager.Initialize();
            } catch (Exception ex) {
                throw new HttpException("Failed to initialize session ID manager.", ex);
            }

            supportsExpiration = handler.SetItemExpireCallback(OnSessionExpired);
            HttpRuntimeSection runtime = HttpRuntime.Section;

            executionTimeout = runtime.ExecutionTimeout;
            //executionTimeoutMS = executionTimeout.Milliseconds;

            this.app = app;

            app.BeginRequest        += new EventHandler(OnBeginRequest);
            app.AcquireRequestState += new EventHandler(OnAcquireRequestState);
            app.ReleaseRequestState += new EventHandler(OnReleaseRequestState);
            app.EndRequest          += new EventHandler(OnEndRequest);
        }