这是会话开始和结束的示例代码。
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中间件。如果可能,请与代码示例讨论。感谢
答案 0 :(得分:0)
在.NET Core 1.0中复制您想要做的事情将非常困难。 SessionStart
和SessionEnd
事件不存在(并且没有计划引入它们),您只能尝试使用一些技巧“复制”它们。
正如在这篇非常明确的文章中明确指出here,
由于ASP.NET Core 1.0背后的驱动力之一是“云就绪”,因此对会话管理设计的关注一直是使其在分布式场景中运行。 Session_End仅在使用inproc模式(本地服务器内存)的会话时发出,并且团队声明他们不会添加仅在本地工作的功能。
BTW,关于会话使用的简短回答:
将以下条目添加到project.json
文件
"Microsoft.AspNet.Session": "1.0.0-rc1-final"
修改您的ConfigureServices以激活会话:
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");