在ASP.NET Core中使用Session时,我们需要添加以下代码:
services.AddSession(options => { options.IdleTimeout = TimeSpan.FromSeconds(10000); //超时时间 options.Cookie.HttpOnly = true; options.Cookie.IsEssential = true; });
//app.UseMvc(); 在普通MVC中可用,但在ASP.NET Core中不推荐使用。
app.UseSession();
如果我们想在Session中存储一个对象,并注意两个关键点:
1.存储对象必须先转换为二进制格式,这通常使用JsonConverter来完成。
2.由于应用程序的内存中仅存储一个Session实例,因此我们不能同时在单个请求中写入两个不同的Session键。这将导致从先前存储的会话信息中删除先前存储的信息,从而导致奇怪的会话行为。
以下代码演示如何正确地将对象写入Session。在以下示例中,person是一个示例对象。
var stream = new MemoryStream(); var formatter = new BinaryFormatter(); formatter.Serialize(stream, person); var serializedPerson = Encoding.UTF8.GetString(stream.ToArray());
// Now we are ready to save the serializedPerson object in the session: HttpContext.Session.SetString("PersonData", serializedPerson);
在读取Session时,我们可以使用以下代码:
var savedPersonData = HttpContext.Session.GetString("PersonData"); var formatter = new BinaryFormatter(); Person person; if (!string.IsNullOrEmpty(savedPersonData)) { var bytes = Encoding.UTF8.GetBytes(savedPersonData); var stream = new MemoryStream(bytes); person = (Person) formatter.Deserialize(stream); }
这些代码可以帮助我们避免ASP.NET Core中的奇怪Session行为,并正确地处理Session管理。