반응형
● 쿠키(Cookie)란?
- 브라우저에 저장되는 작은 크기의 문자열
- 브라우저는 사용자가 쿠키를 생성하도록 한 동일 서버(사이트)에 접속할 때마다 쿠키의 내용을 Cookie 요청 헤더에 넣어서 함께 전달
- 서버는 쿠키를 받아서, 사용자의 정보를 추적하거나, 사용자의 환경 설정을 저장하는 등의 용도로 사용
- Ex) 사용자 환경 설정 저장, 로그인 상태 유지, 광고 개인화, 사용자 행동 추적
- ❗안전하지 않는 데이터를 저장하는 데 사용해서는 안 됨. (Ex : 사용자 비밀번호)
● 구현 필요 부분
1. 로그인 폼
- ID 입력 칸(input text), ID 저장 체크박스(checkbox) 필수
<form class="login-group" id="loginForm">
<div class="item">
<label for="usrId" class="form-label">ID</label>
<input type="text" name="usrId" id="usrId" class="form-control">
</div>
<div class="item">
<label for="pwd" class="form-label">PW</label>
<input type="password" id="pwd" name="pwd" class="form-control">
</div>
<div class="check-item">
<input type="checkbox" class="form-check-input" id="saveId"><label for="saveId">아이디 저장</label>
</div>
<div class="btn-item">
<button type="submit" class="login-btn">LOGIN</button>
</div>
</form>
2. 로그인 페이지 로드 시 쿠키에 저장된 아이디 값 확인
$(function () {
// 로그인 폼 초기화
init();
function init(){
const saveId = getCookie("saveId");
// 쿠키에 저장된 아이디가 있을 경우, ID input 값 추가
if(saveId != "" && typeof(saveId) != "undefined"){
$("#saveId").prop("checked", true);
$("#usrId").val(saveId);
} else { // 쿠키에 저장된 아이디값이 없을 경우, 체크 해제
$("#saveId").prop("checked", false);
}
}
});
// 쿠키 조회
// name : 쿠키값
function getCookie(name) {
const cookie = document.cookie;
if (document.cookie != "") {
var cookieArray = cookie.split("; ");
for ( var index in cookieArray) {
var cookieName = cookieArray[index].split("=");
if (cookieName[0] == name) {
return cookieName[1];
}
}
} return ;
}
3. 로그인 시 ID 저장 체크박스 여부에 따라 쿠키값 설정
// 로그인 form submit event
$("#loginForm").submit(function () {
let usrInfo = $(this).serializeObject();
axios.post('/login', usrInfo)
.then(response => {
if($("#saveId").prop("checked")){ // 체크 시 쿠키에 ID 저장
setCookie("saveId", $("#usrId").val(), 7); // 7일간 ID 저장
} else{ // 체크 해제 시 쿠키에서 ID 삭제
deleteCookie("saveId");
}
window.location.href = '/';
})
.catch(error => {
alert(error.response.data);
});
return false;
});
// 쿠키 설정
// name : 쿠키명
// value : 쿠키값
// expiredays : 쿠키 만료일
function setCookie(name,value,expiredays){
const date = new Date();
date.setDate(date.getDate() + expiredays);
document.cookie = escape(name) + "=" + escape(value) + "; path=/; expires=" + date.toUTCString();
}
// 쿠키 삭제
// name : 쿠키명
function deleteCookie(name) {
const expireDate = new Date();
expireDate.setDate(expireDate.getDate() - 1);
document.cookie = name + "= " + "; expires=" + expireDate.toGMTString();
}
※ ID 저장 체크박스 선택/해제 시마다 쿠키값 저장/삭제를 해도 되지만 그렇게 구현할 경우,
체크박스 선택 후 아이디 입력하는 경우와 같은 경우를 위해 키보드 입력 시마다 쿠키값 재저장을 해야 함.
클라이언트 쪽에서 특별한 요청이 없는 경우, 위와 같이 로그인 실행 시 쿠키값 설정하는 것을 추천!
반응형
'Programming > Javascript' 카테고리의 다른 글
[Javascript] null 병합 연산자(Nullish Coalescing Operator, ??) (2) | 2024.01.10 |
---|---|
[Javascript] 현재 페이지 URL 정보 가져오기 (0) | 2023.12.12 |
[Javascript] jQuery TableDnD를 이용하여 테이블 순번 바꾸기 (2) | 2023.11.02 |
[Javascript] Debounce와 Throttle의 차이 (2) | 2023.11.01 |
[Javascript] 전개 연산자(Spread Operator) (0) | 2023.10.28 |
댓글