forked from AcaMate/AcaMate_Web
84 lines
2.9 KiB
C#
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. 문자열만 저장이 가능하다.
|
|
*/
|