forked from AcaMate/AcaMate_Web
1. 쿠키만 사용하던 저장 동작을 다른 저장소도 사용하게 변경 1.1. 쿠키 대신 세션 레포지토리를 기본적으로 사용하게 Service 코드 구현 2. 로그인 되었을 경우 화면 표기 변경 2.1. 시작하기 버튼 hidden 처리 2.2. 사용자 이름 불러오기 2.3. 로그인 동작 관련 변수 스토리지 저장 2.4. 서버에서 직접적인 크라이언트 쿠키 저장이 아닌 서버는 뒤의 값으로 간섭하게 변경
76 lines
2.7 KiB
C#
76 lines
2.7 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 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. 문자열만 저장이 가능하다.
|
|
*/
|