ASP.NET Core 是一个跨平台,开源的,轻量级,高性能 并且 高度模块化的web框架,Session 可以实现用户信息存储从而可以在同一个客户端的多次请求之间实现用户追踪,在 ASP.Net Core 中可以使用 Microsoft.AspNetCore.Session 中间件来启用 Session 机制。
中间件的价值在于可以在 request -> response 的过程中做一些定制化的操作,比如说:监视数据,切换路由,修改流转过程中的消息体,通常来说:中间件是以链式的方式灌入到 ASP.Net Core 的 pipeline 管道中,这篇文章主要讨论如何使用 Session 中间件。
安装 Session 中间件
要想使用 session 中间件,你可以使用 Visual Studio 2019 中的 NuGet package manager 可视化界面进行安装,或者通过 NuGet package manager console 命令行输入如下命令:
Install-Package Microsoft.AspNetCore.Session
配置 session 中间件
现在 Microsoft.AspNetCore.Session 已经成功安装到你的项目中了,接下来可以将它添加到 ASP.Net Core pipeline 中,请注意:为了能够启动 Session,你必须要使用一个 实现了 IDistributedCache 接口的 cache store 来作为 session 的底层存储,然后你还要在 ConfigureServices 方法下调用 AddSession 方法将其塞入 IOC 容器,最后在 Startup.Configure 方法下使用 UseSession 将其塞入到 request -> response 请求管道中,具体代码如下:
public void ConfigureServices(IServiceCollection services) { services.AddDistributedMemoryCache(); services.AddSession(options => { options.IdleTimeout = TimeSpan.FromSeconds(5); options.Cookie.HttpOnly = true; options.Cookie.IsEssential = true; }); services.AddMvc() .SetCompatibilityVersion(CompatibilityVersion.Version_2_2); }
一旦 session 中间件加入到了 IOC 容器之后,接下来可以在 Configure 方法中调用 UseSession 来启动 session。
public void Configure(IApplicationBuilder app, IHostingEnvironment env) { app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseSession(); app.UseHttpContextItemsMiddleware(); app.UseMvc(); }
存储和获取 session
你可以使用 Set, SetInt32 和 SetString 这三个方法来实现 Session 的存储,这些方法有两个参数,一个是键,一个是键对应的数据,而且 Set 方法的 value 对应的是 byte[] 形式。
类似的,你可以使用 Get,GetInt32 和 GetString 方法来实现 session 的读取,同时 Get 方法接收一个 string 格式的 key,并且返回 byte[] 数组,要使用这些扩展方法,你需要将 Microsoft.AspNetCore.Http 引用到项目中。
下面的代码展示了如何将数据添加到 session 中。
public IActionResult Index() { HttpContext.Session.SetString("Message", "Hello World!"); HttpContext.Session.SetInt32("Year", 2019); return View(); }
接下来再看看如何从 session 中获取数据,如下代码所示:
public IActionResult About() { ViewBag.Message = HttpContext.Session.GetString("Message"); ViewBag.Year = HttpContext.Session.GetInt32("Year"); return View(); }
如果你想设置或者获取属于其他类型的数据,可以在 ISession 接口上新增一个扩展方法并且自己来实现序列化逻辑,从 session 中设置或者获取 复杂类型时,可以把这个类型序列化为 json,或者 json 反序列化为 model。
还有一点要特别注意,默认的 session 是基于内存的,也就是说进程关闭了 session 就会丢失,如果你想实现session持久化,可以采用 sqlserver 或者 redis。
译文链接:https://www.infoworld.com/article/3411563/how-to-work-with-session-state-in-aspnet-core.html
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。