How can I disable session state in ASP.NET MVC?

后端 未结 5 965
闹比i
闹比i 2020-11-27 11:42

I would like to have a very lightweight ASP.NET MVC site which includes removing as many of the usual HttpModules as possible and disabling session state. However when I try

相关标签:
5条回答
  • 2020-11-27 11:57

    Modern solution:

    In ASP.NET, if you do not use the Session object to store any data or if any of the Session events (Session_OnStart or Session_OnEnd) is handled, session state is disabled.

    So not using Session (or TempData), disables Session State.

    Source

    0 讨论(0)
  • 2020-11-27 11:59

    According to Brad Wilson, this has been fixed in MVC 2 Preview 1. See here and here.

    0 讨论(0)
  • 2020-11-27 12:01

    I've found one way, which I don't particularly care for:

    Create NoTempDataProvider

    using System;
    using System.Collections.Generic;
    using System.Web.Mvc;
    
    namespace Facebook.Sites.Desktop.Auth.Models
    {
        public class NoTempDataProvider : ITempDataProvider
        {
            #region [ ITempDataProvider Members ]
    
            public IDictionary<String, Object> LoadTempData(ControllerContext controllerContext)
            {
                return new Dictionary<String, Object>();
            }
    
            public void SaveTempData(ControllerContext controllerContext, IDictionary<String, Object> values) { }
    
            #endregion
        }
    }
    

    Manually Overwrite the Provider in the Controller

    public class AuthController : Controller
    {
        public AuthController()
        {
            this.TempDataProvider = new NoTempDataProvider();
        }
    }
    

    I would greatly prefer a way to do this completely via the configuration, but this works for now.

    0 讨论(0)
  • 2020-11-27 12:04

    You could make your own ControllerFactory and DummyTempDataProvider. Something like this:

    public class NoSessionControllerFactory : DefaultControllerFactory
    {
      protected override IController GetControllerInstance(Type controllerType)
      {
        var controller = base.GetControllerInstance(controllerType);
        ((Controller) controller).TempDataProvider = new DummyTempDataProvider();
        return controller;
      }
    }
    
    
    public class DummyTempDataProvider : ITempDataProvider
    {
      public IDictionary<string, object> LoadTempData(ControllerContext controllerContext)
      {
        return new Dictionary<string, object>();
      }
    
      public void SaveTempData(ControllerContext controllerContext, IDictionary<string, object> values)
      {
      }
    }
    

    And then you would just need to register the controller factory on app startup - e.g. you could do this in global.asax:

    ControllerBuilder.Current.SetControllerFactory(new NoSessionControllerFactory());
    
    0 讨论(0)
  • 2020-11-27 12:08

    If you need to use TempData for simple strings, you can use the CookieTempDataProvider in MvcFutures http://aspnet.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=24471.

    0 讨论(0)
提交回复
热议问题