1. Service 설정
Startup.cs의 ConfigureServices() method에서 Session을 사용하기 위한 Service를 추가합니다.
services.AddDistributedMemoryCache();
services.AddSession(option =>
{
option.Cookie.Name = "mySession";
option.IdleTimeout = TimeSpan.MaxValue; //기본값 20분
});
AddDistributedMemoryCache() method는 Server의 Cache memory를 사용하도록 하기 위한 것으로 Session을 저장하기 위함이며 AddSession()은 Session자체의 설정으로 Cookie.Name으로 Session의 이름을, IdleTimeout으로 Session의 유효시간을 지정하였습니다. 특히 IdleTimeout값은 따로 설정하지 않으면 기본 20분이 되는데 예제에서는 이 시간에 최대치를 부여했으나 memory관리 측면에서 되도록 짧은 시간을 부여할것을 권장합니다.
2. Middleware 추가
Startup.cs의 Configure() method에서 Session을 사용하기 위한 Middleware를 추가합니다.
app.UseSession();
이 설정은 반드시 UseEndpoints()나 UseMVC()위에서 선언되어야 합니다.
3. Session 저장하고 가져오기
Session은 Set() method를 통해 필요한 값을 저장할 수 있습니다. 이때 첫 번째 인수로 저장된 값을 구분하기 위한 key를 지정하며 두 번째 인수로 저장하고자 하는 Data자체를 설정합니다.
MyData md = new();
md.Id = 1;
md.Name = "abc";
_context.Session.SetString("1key", JsonConvert.SerializeObject(md));
_context.Session.SetString("2key", "hello");
_context.Session.SetInt32("3key", 100);
반대로 값을 가져오는 경우는 Get() method를 사용하며 저장할때 사용한 key값을 통해 필요한 값을 가져오게 됩니다.
var result = JsonConvert.DeserializeObject<MyData>(_context.Session.GetString("1key"));
TempData["id"] = result.Id;
TempData["name"] = result.Name;
TempData["2key"] = _context.Session.GetString("2key");
int? i = _context.Session.GetInt32("3key");
TempData["3key"] = i.Value;
_context.Session.Remove("1key");
_context.Session.Remove("2key");
_context.Session.Remove("3key");
마지막으로 Session을 삭제하고자 한다면 Remove를 통해 제거할 수 있으며 이때도 key값을 통해 제거합니다.
'.NET > ASP.NET' 카테고리의 다른 글
[ASP.NET Core] HttpContext.User (0) | 2022.02.10 |
---|---|
[ASP.NET Core] Razor Page로 웹프로젝트 만들기 (10) | 2022.01.24 |
[ASP.NET Core] Logging (0) | 2021.11.13 |
[ASP.NET Core] Claim 인증과 권한 (0) | 2021.11.11 |
[ASP.NET Core] 암호화 사용하기(DataProtection) (0) | 2021.11.07 |