1

这是会话开始和结束的示例代码。

public void Session_OnStart()
{
  Application.Lock();
  Application["UsersOnline"] = (int)Application["UsersOnline"] + 1;
  Application.UnLock();
}

public void Session_OnEnd()
{
  Application.Lock();
  Application["UsersOnline"] = (int)Application["UsersOnline"] - 1;
  Application.UnLock();
}

从 MVC6 将没有 global.asax 文件。那么如何通过owin中间件处理会话开始和结束。如果可能的话,与代码示例讨论。谢谢

4

1 回答 1

0

在 .NET Core 1.0 中复制您想要做的事情将非常困难。和事件不存在(也没有计划介绍它们),您只能尝试用一些技巧“复制”它们SessionStart。正如这篇极其清晰的文章中SessionEnd明确指出的那样

由于 ASP.NET Core 1.0 背后的驱动力之一是“云就绪”,因此会话管理设计的重点一直是使其在分布式场景中工作。Session_End 仅在会话使用 inproc 模式(本地服务器内存)并且团队声明他们不会添加仅在本地工作的功能时才会触发。

顺便说一句,关于会话使用的简短回答:

设置

将以下条目添加到project.json文件的依赖项节点

"Microsoft.AspNet.Session": "1.0.0-rc1-final"

修改您的 ConfigureServices 以激活 Session:

public void ConfigureServices(IServiceCollection services)
{
    // Add framework services.
    services.AddMvc();

    services.AddSession(options => { 
            options.IdleTimeout = TimeSpan.FromMinutes(30); 
            options.CookieName = ".MyApplication";
        });
}

然后你可以像这样激活它:

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
    app.UseSession();
    //removed for brevity
}

用法

HttpContext.Session.SetString("Name, "Foo");
HttpContext.Session.SetInt32("Age", 35);

或者

var name = HttpContext.Session.GetString("Name");
var age = HttpContext.Session.GetInt32("Age");
于 2016-03-24T08:21:51.893 回答