ASP.NET/ASP.NET Core

[ASP.Net Core] Session 객체 Custom 하기

http://portfolio.wonpaper.net 2023. 2. 10. 10:48

https://learn.microsoft.com/ko-kr/aspnet/core/fundamentals/app-state?view=aspnetcore-6.0 

 

ASP.NET Core의 세션

요청 간에 세션을 유지하는 방법을 알아봅니다.

learn.microsoft.com

 

간단히 세션 정리하면 다음과 같다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// Controller 에서 세션굽기
HttpContext.Session.SetString("id""test");
HttpContext.Session.SetString("name""홍길동");
 
// 모든 세션 삭제
HttpContext.Session.Clear();
 
// View 에서 세션 불러오기
 
@using Microsoft.AspNetCore.Http;
 
Context.Session.GetString("id")
Context.Session.GetString("name")
 
 
cs

 

위와같이 단일값 형태로 string 형으로 굽고 불러오고 하지 않고, 객체 형태로 세션을 굽고 활용하는 방법을 알아 보자.

다음의 별도의 SessionHelper 클래스를 만들어 활용해 보자.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
using Microsoft.AspNetCore.Http;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace TestProgram.Api.Lib
{
    public static class SessionHelper
    {
        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);
        }
    }
 
 
    /*
     using Microsoft.AspNetCore.Http;
     Product product = new Product
        {
            Id = "p01",
            Name = "Name 1",
            Price = 5
        };
     SessionHelper.SetObjectAsJson(HttpContext.Session, "product", product);
 
        List<Product> products = new List<Product>() {
            new Product {
                Id = "p01",
                Name = "Name 1",
                Price = 5
            },
            new Product {
                Id = "p02",
                Name = "Name 2",
                Price = 9
            },
            new Product {
                Id = "p03",
                Name = "Name 3",
                Price = 2
            }
        };
     SessionHelper.SetObjectAsJson(HttpContext.Session, "products", products);
    */
 
 
    //Product product = SessionHelper.GetObjectFromJson<Product>(Context.Session, "product");
    //List<Product> products = SessionHelper.GetObjectFromJson<List<Product>>(Context.Session, "products");
}
 
cs

 

참고 : https://aspdotnet.tistory.com/2750