NuGet安装
Microsoft.AspNetCore.Session Microsoft.AspNetCore.Http.Extensions
Startup.cs中注册
// 添加一个内存缓存 services.AddDistributedMemoryCache(); services.AddSession(options => { // 设置10秒钟Session过期来测试 options.IdleTimeout = TimeSpan.FromSeconds(10); options.Cookie.HttpOnly = true; });
app.UseSession();
Controller中使用Session
HttpContext.Session.SetString("param", str); string value = HttpContext.Session.GetString("param");
非Controller中使用Session
public class SessionTestClass { private readonly IHttpContextAccessor _httpContextAccessor; private ISession _session => _httpContextAccessor.HttpContext.Session; public SomeOtherClass(IHttpContextAccessor httpContextAccessor) { _httpContextAccessor = httpContextAccessor; } public void Set() { _session.SetString("code", "123456"); } public void Get() { string code = _session.GetString("code"); } }
ISession的扩展,存储复杂对象
public static class SessionExtensions { public static void SetObjectAsJson(this ISession session, string key, object value) { session.SetString(key, JsonConvert.SerializeObject(value)); } public static T GetObjectFromJson<T>(this ISession session, string key) { var value = session.GetString(key); return value == null ? default(T) : JsonConvert.DeserializeObject<T>(value); } }
使用范例:
var myTestObject = new MyTestClass(); HttpContext.Session.SetObjectAsJson("SessionTest", myTestObject); var myComplexObject = HttpContext.Session.GetObjectFromJson<MyClass>("SessionTest");