Session 是保存使用者和Web 應用程式的會話狀態的一種方法,ASP.NET Core 提供了一個用於管理會話狀態的中間件,本篇文章主要介紹了Asp.net Core中使用Session ,有興趣的可以了解一下、
前言
2017年就這麼悄無聲息的開始了,2017年對我來說又是特別重要的一年。
元旦放假在家寫了個Asp.net Core驗證碼登錄, 做demo的過程中遇到兩個小問題,第一是在Asp.net Core引用dll,以往我們引用DLL都是直接引用,在Core裡這樣是不行的,必須基於NuGet添加,或者基於project.json添加,然後保存VS會啟動還原類別庫。
第二就是使用Session的問題,Core裡使用Session需要加入Session類別庫。
新增Session
在你的專案上是基於NuGet新增:Microsoft.AspNetCore.Session。
修改startup.cs
在startup.cs找到方法ConfigureServices(IServiceCollection services) 注入Session(這個地方是Asp.net Core pipeline):services.AddSession();
接下來我們要告訴Asp.net Core使用記憶體儲存Session數據,在Configure(IApplicationBuilder app,...)中加入程式碼:app.UserSession( );
Session
1、在MVC Controller裡使用HttpContext.Session
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | using Microsoft.AspNetCore.Http;
public class HomeController:Controller
{
public IActionResult Index()
{
HttpContext.Session.SetString( "code" , "123456" );
return View();
}
public IActionResult About()
{
ViewBag.Code=HttpContext.Session.GetString( "code" );
return View();
}
}
|
登入後複製
2、如果不是在Controller裡,你可以注入IHttpContextAccessor
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | public class SomeOtherClass
{
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" );
}
}
|
登入後複製
儲存複雜物件
儲存物件時把物件序列化#為json 字串儲存。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | 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);
}
}
|
登入後複製
1 2 3 | var myComplexObject = new MyClass();
HttpContext.Session.SetObjectAsJson( "Test" , myComplexObject);
var myComplexObject = HttpContext.Session.GetObjectFromJson<MyClass>( "Test" );
|
登入後複製
使用SQL Server或Redis儲存
1、SQL Server
新增引用 "Microsoft.Extensions.Caching. SqlServer": "1.0.0"
注入:
1 2 3 4 5 6 7 8 | services.AddSqlServerCache(o =>
{
o.ConnectionString = "Server=.;Database=ASPNET5SessionState;Trusted_Connection=True;" ;
o.SchemaName = "dbo" ;
o.TableName = "Sessions" ;
});
|
登入後複製
2、Redis
新增引用 "Microsoft.Extensions.Caching.Redis": "1.0.0"
注入:
1 2 3 | services.AddSingleton<IDistributedCache, RedisCache>();
|
登入後複製
【相關推薦】
1. 特別推薦:「php程式設計師工具箱」V0.1版本下載
2. ASP免費影片教學
#3. asp參考手冊
#
以上是介紹Asp.net使用Session的方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!