javascript
[JavaScript] 쿠키를 이용한 자동 로그인
데브워니
2022. 4. 14. 16:58
구현 목표
- 로그인 시 쿠키 생성
- 로그아웃 및 일정 시간이 지나기 전까지는 브라우저가 닫혀도 로그인 상태 유지
- 로그아웃을 하거나 일정 시간이 지나면 자동으로 쿠키 삭제
로그인
<div style="position: absolute; width:100%; height: 100%; background-color: #f3f3f3; background-repeat: no-repeat; background-size: cover ;">
<div class="loginBox">
<div class="LogoBox">
<img src="" style="width: 200px;">
</div>
<form name="saveForm">
<div class="login_id">
<input type="text" placeholder="아이디" name="USER_ID"/>
</div>
<div class="login_pw">
<input type="password" placeholder="비밀번호" name="USER_PWD" onkeypress="onkey(event);"/>
</div>
<div class="auto_login">
<input type="checkbox" name="auto_login" onclick="is_checked()"> 로그인 유지
</div>
<div style="text-align : center;">
<button type="button" class="login_button" onclick="login();">로그인</button>
</div>
</form>
<div style="margin-top:8%;">
<img src="./images/egovframework/example/LG_logo(mini).png" style="width: 50px; display: block; margin: auto;">
<span style="width: 150px; color:#6e6f71; display: block; margin: auto; margin-top:10px; font-size:80%;">대표전화 070 4333 8844</span>
</div>
</div>
</div>
<script type="text/javascript">
$(function(){
var USER_ID = getCookie("USER_ID");
var USER_PWD = getCookie("USER_PWD");
if(USER_ID != "") {
$('input[name=USER_ID]').val(USER_ID);
$('input[name=USER_PWD]').val(USER_PWD);
login();
}
})
function login() {
if($(this).hasClass('active')){
$(this).removeClass('active');
}else{
$(this).addClass('active');
}
if($('input[name=USER_ID]').val() == "") {
alert('id를 입력해주세요.');
return false;
}
if($('input[name=USER_PWD]').val() == "") {
alert('Password를 입력해주세요.');
return false;
}
var form = $('form[name=saveForm]');
var param = getSearchFormData(form);
PostData('./login_check.do', param, login_result);
}
function login_result(data) {
if(data == "success") {
if($('input[name="auto_login"]').is(":checked")) {
setCookie("USER_ID", $('input[name=USER_ID]').val(), 10000000);
setCookie("USER_PWD", $('input[name=USER_PWD]').val(), 10000000);
}
_go('./linkman_log.do');
} else {
alert("등록된 정보가 없습니다.\n관리자에게 문의하시기 바랍니다.");
}
}
function onkey(e) {
if (e.keyCode == 13) {
login();
}
}
function setCookie(cookieName, value, exdays){
var exdate = new Date();
exdate.setDate(exdate.getDate() + exdays);
var cookieValue = escape(value) + ((exdays==null) ? "" : "; expires=" + exdate.toGMTString());
document.cookie = cookieName + "=" + cookieValue;
}
function getCookie(cookieName) {
cookieName = cookieName + '=';
var cookieData = document.cookie;
var start = cookieData.indexOf(cookieName);
var cookieValue = '';
if(start != -1){
start += cookieName.length;
var end = cookieData.indexOf(';', start);
if(end == -1)end = cookieData.length;
cookieValue = cookieData.substring(start, end);
}
return unescape(cookieValue);
}
function deleteCookie(cookieName){
var expireDate = new Date();
expireDate.setDate(expireDate.getDate() - 1);
document.cookie = cookieName + "= " + "; expires=" + expireDate.toGMTString();
}
</script>
로그아웃
<ul class="navbar-nav ml-auto">
<div class="topbar-divider d-none d-sm-block"></div>
<!-- Nav Item - User Information -->
<li class="nav-item"><a href="javascript:void(0);" class="nav-link"><span class="mr-2 d-none d-lg-inline text-gray-600 small">${DEPT_NM}</span></a></li>
<li class="nav-item dropdown no-arrow">
<a class="nav-link" href="./logout.do"><img alt="" src="./images/egovframework/example/logout.png" style="height:30px" onclick="javascript:logout();"></a></li>
</ul>
function logout() {
deleteCookie('USER_ID');
deleteCookie('USER_PWD');
_go('./logout.do');
}
function deleteCookie(cookieName){
var expireDate = new Date();
expireDate.setDate(expireDate.getDate() - 1);
document.cookie = cookieName + "= " + "; expires=" + expireDate.toGMTString();
}
[참조]
https://inpa.tistory.com/entry/JS-%F0%9F%93%9A-%EC%BF%A0%ED%82%A4Cookie-%EB%8B%A4%EB%A3%A8%EA%B8%B0