using Microsoft.AspNetCore.Components; using Microsoft.JSInterop; namespace Front.Program.Services; public enum STORAGE_TYPE { Cookie, Local, Session } public class StorageService { private readonly IJSRuntime _js; public StorageService(IJSRuntime js) { _js = js; } public async Task SetItemAsync(string key, string value, STORAGE_TYPE type = STORAGE_TYPE.Session, int expire_time = 1) { await (type switch { STORAGE_TYPE.Cookie => _js.InvokeVoidAsync("setCookie", key, value, expire_time), STORAGE_TYPE.Local => _js.InvokeVoidAsync("localStorage.setItem", key, value), STORAGE_TYPE.Session => _js.InvokeVoidAsync("sessionStorage.setItem", key, value), _ => throw new ArgumentException("Invalid storage type") }); } public async Task GetItemAsync(string key, STORAGE_TYPE type = STORAGE_TYPE.Session) { return type switch { STORAGE_TYPE.Cookie => await _js.InvokeAsync("getCookie", key), STORAGE_TYPE.Local => await _js.InvokeAsync("localStorage.getItem", key), STORAGE_TYPE.Session => await _js.InvokeAsync("sessionStorage.getItem", key), _ => null }; } public async Task RemoveItemAsync(string key, STORAGE_TYPE type = STORAGE_TYPE.Session) { await (type switch { STORAGE_TYPE.Cookie => _js.InvokeVoidAsync("deleteCookie", key), STORAGE_TYPE.Local => _js.InvokeVoidAsync("localStorage.removeItem", key), STORAGE_TYPE.Session => _js.InvokeVoidAsync("sessionStorage.removeItem", key), _ => throw new ArgumentException("Invalid storage type") }); } } /* 스토리지 종류 1. Cookie 만료일 : 명시적으로 설정이 가능 (설정에 따라 그 값을 변경 가능) 접근성 : 서버와 클라이언트 모두 접근이 가능함 특징 1. HTTP 요청마다 서버로 전송이 되며 도메인/경로 제한이 가능하다. 2. HttpOnly나 secure 옵션으로 보안 설정이 가능하다. 2. Local 만료일 : 브라우저 데이터 삭제 전까지는 영구 보관 가능 접근성 : 클라이언트 측에서 JS 를 통해서만 접근이 가능 특징 1. 도메인별로 분리된 저장소로 동기적인 동작이 된다. 2. 문자열만 저장이 가능하다. 3. Sesson 만료일 : 브라우저의 탭/창 닫을 때 까지 보관 (닫게 되면 삭제) 접근성 : 클라이언트 측에서 JS 를 통해서만 접근이 가능 특징 1. 탭/창 별로 불리된 저장소며 동기적인 동작이 가능하다. 2. 문자열만 저장이 가능하다. */