Witam,

Mam problem ze stworzeniem sesji w aplikacji hostowanej za pomocą Owina, próbowałem użyć RedisSession, ale nie udało mi się połapać w konfiguracji.
Szukałem rozwiązania jakiś czas, próbowałem różnych rzeczy, aż w końcu zdecydowałem się tu napisać.

Scenariusz jest taki:

  • Loguję się wysyłając żądanie POST,
  • Dane powinny być zapisywane w sesji,
  • Dla kolejnego zapytania GET/POST, wymagającego uprzedniego logowania sesja jest jednak pusta.

Obiekt HTTPContext jest pusty.

Korzystam z Ninject do wstrzykiwania zależności.

Próbowałem czegoś takiego: http://stackoverflow.com/questions/23565543/can-owin-middleware-use-the-http-session

Czy ma ktoś jakiś pomysł jak przechowywać dane logowania w sesji Owin?

Poniżej plik konfiguracyjny Owin, zawarte w nim są rzeczy z linku wstawionego wyżej:

[assembly: OwinStartup(typeof(Service.Startup))]
namespace Service
{
public class Startup
    {
        public void Configuration(IAppBuilder appBuilder)
        {
            var config = new HttpConfiguration();
            config.Routes.MapHttpRoute("DefaultApi", "api/{controller}/{action}/{id}", new { id = RouteParameter.Optional }
                );
            appBuilder.RequireAspNetSession();
            appBuilder.UseNinjectMiddleware(CreateKernel).UseNinjectWebApi(config);

        }

        public static StandardKernel CreateKernel()
        {
            var kernel = new StandardKernel(new Module());
            return kernel;
        }
    }
    public static class AspNetSessionExtensions
    {
        public static IAppBuilder RequireAspNetSession(this IAppBuilder app)
        {
            app.Use((context, next) =>
            {
                // Depending on the handler the request gets mapped to, session might not be enabled. Force it on.
                HttpContextBase httpContext = context.Get<HttpContextBase>(typeof(HttpContextBase).FullName);
                httpContext.SetSessionStateBehavior(SessionStateBehavior.Required);
                return next();
            });
            // SetSessionStateBehavior must be called before AcquireState
            app.UseStageMarker(PipelineStage.MapHandler);
            return app;
        }
    }
}