AcaMate_Web/Program/Services/StorageService.cs

84 lines
2.9 KiB
C#

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<string?> GetItemAsync(string key, STORAGE_TYPE type = STORAGE_TYPE.Session)
{
return type switch
{
STORAGE_TYPE.Cookie => await _js.InvokeAsync<string>("getCookie", key),
STORAGE_TYPE.Local => await _js.InvokeAsync<string>("localStorage.getItem", key),
STORAGE_TYPE.Session => await _js.InvokeAsync<string>("sessionStorage.getItem", key),
_ => null
};
}
public async Task<bool> RemoveItemAsync(string key, STORAGE_TYPE type = STORAGE_TYPE.Session)
{
try
{
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")
});
return true;
}
catch
{
return false;
}
}
}
/* 스토리지 종류
1. Cookie
만료일 : 명시적으로 설정이 가능 (설정에 따라 그 값을 변경 가능)
접근성 : 서버와 클라이언트 모두 접근이 가능함
특징
1. HTTP 요청마다 서버로 전송이 되며 도메인/경로 제한이 가능하다.
2. HttpOnly나 secure 옵션으로 보안 설정이 가능하다.
2. Local
만료일 : 브라우저 데이터 삭제 전까지는 영구 보관 가능
접근성 : 클라이언트 측에서 JS 를 통해서만 접근이 가능
특징
1. 도메인별로 분리된 저장소로 동기적인 동작이 된다.
2. 문자열만 저장이 가능하다.
3. Sesson
만료일 : 브라우저의 탭/창 닫을 때 까지 보관 (닫게 되면 삭제)
접근성 : 클라이언트 측에서 JS 를 통해서만 접근이 가능
특징
1. 탭/창 별로 불리된 저장소며 동기적인 동작이 가능하다.
2. 문자열만 저장이 가능하다.
*/