方法一、在.netCore中使用session首先需要在Startup中進行配置,
在 public IServiceProvider ConfigureServices(IServiceCollection services)中添加
//添加session services.AddDistributedMemoryCache(); services.AddSession(options => { // 設置 Session 過期時間15分鍾 options.IdleTimeout = TimeSpan.FromMinutes(15); });
為方便統一獲取,把Cookie和Session統一放到BaseController中
public abstract class BaseController : Controller { private readonly IHttpContextAccessor _httpContextAccessor; private ISession _session => _httpContextAccessor.HttpContext.Session; /// <summary> /// 設置本地cookie /// </summary> /// <param name="key">鍵</param> /// <param name="value">值</param> /// <param name="minutes">過期時長,單位:分鍾</param> protected void SetCookies(string key, string value, int minutes = 30) { HttpContext.Response.Cookies.Append(key, value, new CookieOptions { Expires = DateTime.Now.AddMinutes(minutes) }); } /// <summary> /// 刪除指定的cookie /// </summary> /// <param name="key">鍵</param> protected void DeleteCookies(string key) { HttpContext.Response.Cookies.Delete(key); } /// <summary> /// 獲取cookie的value /// </summary> /// <param name="key">鍵</param> /// <returns>返回對應的值</returns> protected string GetCookiesValue(string key) { HttpContext.Request.Cookies.TryGetValue(key, out string value); if (string.IsNullOrEmpty(value)) value = string.Empty; return value; } /// <summary> /// 添加Sesssion /// </summary> /// <param name="SesionStr"></param> /// <param name="Code"></param> public void SetSession(string SesionStr, string Code) { _session.SetString(SesionStr, Code); } /// <summary> /// 獲取Session /// </summary> public string GetSession(string SesionStr) { string code = _session.GetString(SesionStr); return code; } }
在HomeController繼承BaseController,並進行設置Cookies和Session
設置Cookies
SetCookies("CookiesKey", cookieValue, 60);
獲取Cookies
GetCookiesValue("CookiesKey");
方法二、設置和讀取Session。
添加SessionExtensions類,使用序列化來保存Value
using Microsoft.AspNetCore.Http;//需要添加此應用
//添加和獲取Session
public static class SessionExtensions { public static void SetObjectAsJson<T>(this ISession session, string key, T 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); } }
設置Session
//values可以為單一字符或者實體類
HttpContext.Session.SetObjectAsJson("SessionKey", UserModel);
獲取Session
HttpContext.Session.GetObjectFromJson<UserModel>("SessionKey");
