상세 컨텐츠

본문 제목

[ASP.NET Core] Session

.NET/ASP.NET Core

by 클리엘 클리엘 2021. 11. 14. 03:06

본문

728x90

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값을 통해 제거합니다.

728x90

관련글 더보기

댓글 영역