일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 리눅스셋팅
- include액션태그
- first-of-child
- interrupt()
- char[] String 형변환
- include 지시자
- InputDialog
- ThreadGroup()
- ID중복
- String char[] 형변환
- first-child
- sleep()메소드
- Daemon()
- Linux세팅
- 메모리스트림
- 표현 언어
- 스레드그룸
- 아이디중복
- StringReader
- isinterrupted()
- ObjectInputStream
- 상관 서브 쿼리
- interrupted()
- MemoryStream
- include지시자
- Linux셋팅
- 상관서브쿼리
- 동기화
- StringWriter
- 리눅스세팅
- Today
- Total
다연이네
[days08] 쿠키(Cookie) 본문
쿠키(Cookies)
1. js -> 쿠키 생성 : 사용자가 (어떤 의도에 의해) 본인 PC(컴퓨터)에 [텍스트 파일]로 저장한 데이터
(사용자 정보 등 / 장바구니)
2. 상태 저장 방법으로 클라이언트 측에 저장하는 방법 : 쿠키
3. document.cookie 속성으로 [js 쿠키 관리]
4. 형식 : name="nameValue"; 쿠키명 (필수)
expires="expireDate"; 만료시점 (선택) 설정 안하고 브라우저 닫으면 쿠키는 삭제됨
path="pathHolders"; 경로 (선택)
domain="domainName"; 도메인 (선택) localhost
secure 보안 (선택)
JSP(서버)에서 쿠키 관리
버튼으로 모든 쿠키 정보를 확인할 수 있고,
쿠키를 생성할 수 있고,
id를 입력해 쿠키 값을 확인할 수 있고,
id를 입력해 해당 쿠키를 삭제할 수 있게 한다.
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Insert title here</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
</head>
<body>
쿠키 이름 : <input type="text" id="cname" /><br>
쿠키 값 : <input type="text" id="cvalue" /><br>
<button onclick="getAllCookies()"> 모든 쿠키 정보 확인 </button>
<button onclick="setCookie()">쿠키 생성</button>
<button onclick="getCookie()">쿠키 확인</button>
<button onclick="delCookie()">쿠키 삭제</button>
<p id="demo"></p>
<script>
function delCookie() {
var cname = $("#cname").val();
//쿠키를 삭제할 때는 만료시점을 과거로 설정해서 다시 쿠키 생성(저장)
var now = new Date();
now.setDate(now.getDate()-1); //오늘날짜-1일 (과거로 만들기)
//쿠키 저장
document.cookie = cname+"=; expires="+now.toUTCString();
//삭제할거니 cvalue는 필요 없겠다
}
function getCookie() {
var cname = $("#cname").val();
// "id=admin; color=red; age=30"
var cookies = document.cookie;
//var cookieArray = cookies.split(";");
var cookieArray = cookies.split(/;\s/);
/*
cookieArray.forEach(function(elt, i, array) {
//cookie += elt+"<br>";
//$("#demo").html(cookie);
var nv = elt.split("=");
if (nv[0]==cname) { //똑같으면 쿠키 찾아진것
$("#demo").html(unescape(nv[1]));
//unescape: 저장할때 escape로 저장했으니 출력할때 유니코드값을 다시 바꿔주는 것
return; //forEach() 중간
//강제 예외 발생 - 중단
//사용하려면 return이 아니라 throw를 줘서 강제로 예외 발생시켜야 함
//왜냐. foreach는 중단에 중단하면 안되는 함수라 빠져나올거면
//강제로 예외를 발생시켜야 한다
}
}); 안된다
*/
//foreach 대신 for문 쓰니 된다
for (var i = 0; i < cookieArray.length; i++) {
var nv = cookieArray[i].split("=");
if (nv[0]==cname) { //똑같으면 쿠키 찾아진것
$("#demo").html(unescape(nv[1]));
//unescape: 저장할때 escape로 저장했으니 출력할때 유니코드값을 다시 바꿔주는 것
return;
}
}
$("#demo").html("찾는 쿠키는 존재하지 않습니다");
}
function setCookie() {
var cname = $("#cname").val();
var cvalue = escape($("#cvalue").val());
//쿠키값(cvalue) escape() 저장 -> %uBC30%uB2E4%uC5F0 한글이 16진수로 출력된다
//$("#demo").html(escape(cvalue));
//unescape(??); 16진수를 한글로 바꾸자
//만료시점(10일)
var now = new Date();
now.setDate(now.getDate()+10); //오늘날짜+10일 (18+10=28)
//쿠키 저장
document.cookie = cname+"="+cvalue+"; expires="+now.toUTCString();
//텍스트 박스 초기화
$("#cname").val("");
$("#cvalue").val("");
//브라우저 우측 점3개 -> 설정
}
function getAllCookies(){
var cookies = document.cookie; //string 돌리는데
if (cookies) { //if 줘도 되냐? => null, "", 0, undefined, -0 등등 다 false이기 때문에 가능
$("#demo").html(cookies);
}else{
$("#demo").html("쿠키 존재x");
}
}
</script>
</body>
</html>
주의할 점
- 쿠키를 삭제할 때는 만료시점을 과거로 설정해서 다시 쿠키를 생성(저장)하면 된다.
- foreach 문은 중단에 중단하면 안되는 함수이다.
빠져나와야 할 경우 return이 아니라 throw를 줘서 강제로 예외 발생시켜야한다.
- 쿠키의 nameValue를 설정할 때는 escape, 불러올 때는 unescape를 주자
var cvalue = escape($("#cvalue").val());
$("#demo").html(unescape(nv[1]));
위 코딩을 cookie.js로 자바스크립트를 따로 빼 코딩해보자
cookie.js
/**
* cookie.js
*/
function delCookie(cname) { //매개변수로 쿠키명 받기
if(getCookie(cname)){
var now = new Date();
now.setDate(now.getDate()-1);
document.cookie = cname+"=; expires="+now.toUTCString();
}
}
function getCookie(cname) {
var cookies = document.cookie;
var cookieArray = cookies.split(/;\s/);
for (var i = 0; i < cookieArray.length; i++) {
var nv = cookieArray[i].split("=");
if (nv[0]==cname) {
return unescape(nv[1]);
}
}
return null;
}
function setCookie(cname, cvalue, exdays) {
var now = new Date();
now.setDate(now.getDate()+exdays);
//1970.1.1~ms 값
//now.setTime( now.getTime + 1000*60*60*24*exdays ) 조작해나가면 된다
document.cookie = cname+"="+cvalue+"; expires="+now.toUTCString();
//domain = localhost
//path = /webPro/javascript/days08
}
function getAllCookies(){
var cookies = document.cookie;
return cookies; //모든 쿠키 가져오겠다는
}
html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Insert title here</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script src="cookie.js"></script>
</head>
<body>
쿠키 이름 : <input type="text" id="cname" /><br>
쿠키 값 : <input type="text" id="cvalue" /><br>
<button onclick="btn_allCookies()"> 모든 쿠키 정보 확인 </button>
<button onclick="btn_setCookie()">쿠키 생성</button>
<button onclick="btn_getCookie()">쿠키 확인</button>
<button onclick="btn_delCookie()">쿠키 삭제</button>
<p id="demo"></p>
<script>
function btn_allCookies() {
var cookies = getAllCookies(); //js파일의 함수 호출
$("#demo").html(cookies);
}
function btn_setCookie() {
setCookie($("#cname").val(), $("#cvalue").val());
}
function btn_getCookie() {
var cvalue = getCookie($("#cname").val());
$("#demo").html(cvalue);
}
function btn_delCookie() {
var cookies = delCookie($("#cname").val());
}
</script>
</body>
</html>
배경 이미지를 bgimg라는 쿠키 이름으로 item01/item02/item03 저장
1) bgimg라는 쿠키 이름이 존재한다면 쿠키값을 읽어와 body의 배경으로 설정
2) 존재하지 않는다면 item01이미지를 배경이미지로 기본 설정
라디오 버튼 클릭하면
1) 배경변경
2)쿠키저장
|
라디오 버튼이 옮겨져 있고 배경이 바뀌어져 있다. |
라디오버튼을 item02로 맞춘 후에는 |
bgimg는 item02로 바뀌어져 있다. |
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Insert title here</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script src="cookie.js"></script>
</head>
<body>
<table border="1" style="background-color: white;width:400px;margin:0 auto">
<tr>
<td><img src="../images/item01.gif" alt="" /></td>
<td><img src="../images/item02.gif" alt="" /></td>
<td><img src="../images/item03.gif" alt="" /></td>
</tr>
<tr>
<td><input type="radio" checked="checked" name="bgImages" id="item01" value="item01" />item01</td>
<td><input type="radio" name="bgImages" id="item02" value="item02" />item02</td>
<td><input type="radio" name="bgImages" id="item03" value="item03" />item03</td>
</tr>
</table>
<script>
var cname= "bgimg";
var cvalue ;
var exdays = 10; //10일동안 쿠키 살아있게
window.onload= function () {
.gif를 기본 배경으로 설정
cvalue = getCookie(cname);
if (cvalue) { //쿠키가 있다면
document.body.style.backgroundImage="url(../images/"+cvalue+".gif)";
document.getElementById(cvalue).checked ="checked";
} else {
document.body.style.backgroundImage="url(../images/item01.gif)";
}
//라디오 버튼 클릭하면
//1) 배경변경
//2)쿠키저장
var radioButtons = document.getElementsByName("bgImages");
for (var i = 0; i < radioButtons.length; i++) {
radioButtons[i].onclick = function() {
document.body.style.backgroundImage="url(../images/"+this.value+".gif)";
setCookie(cname, this.value, exdays);
}
}//for
}
</script>
</body>
</html>
위 코딩을 jQuery를 사용해 수정해보자
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Insert title here</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script src="cookie.js"></script>
</head>
<body>
<table border="1" style="background-color: white;width:400px;margin:0 auto">
<tr>
<td><img src="../images/item01.gif" alt="" /></td>
<td><img src="../images/item02.gif" alt="" /></td>
<td><img src="../images/item03.gif" alt="" /></td>
</tr>
<tr>
<td><input type="radio" checked="checked" name="bgImages" id="item01" value="item01" />item01</td>
<td><input type="radio" name="bgImages" id="item02" value="item02" />item02</td>
<td><input type="radio" name="bgImages" id="item03" value="item03" />item03</td>
</tr>
</table>
<script>
var cname= "bgimg";
var cvalue ="item01";
var exdays = 10;
$( function () {
cvalue = getCookie(cname);
if (cvalue) {
$("#"+cvalue).prop("checked",true);
$("body").css("background-image", "url(../images/"+cvalue+".gif)");
}
$("body").css("background-image", "url(../images/item01.gif)");
$(":radio").click(function(event) {
$("body").css("background-image", "url(../images/"+$(this).val()+".gif)");
setCookie(cname, $(this).val(), exdays);
});
});
</script>
</body>
</html>
로그인 성공시 환영합니다 화면으로 넘어간다. |
로그아웃 버튼을 누르면 다시 로그인 화면으로 돌아간다. |
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Insert title here</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script src="cookie.js"></script>
<style>
.tblLogin, .tblLogout{
width: 400px;
height: 100px;
}
</style>
</head>
<body>
<table id="tblLogin" class="tblLogin" border="1">
<tr>
<td>아이디</td>
<td><input type="text" id="txtid" /></td>
<td rowspan="2">
<input type="checkbox" id="ckbLogin" />
<label for="ckbLogin">ID 저장</label>
<br>
<input type="button" id="btnLogin" value="로그인" />
</td>
</tr>
<tr>
<td>비밀번호</td>
<td><input type="password" id="txtpwd" /></td>
</tr>
</table>
<table id="tblLogout" class="tblLogout" border="1">
<tr>
<td>
<span id="s_id">admin</span> 님 환영합니다.
<br><input type="button" id="btnLogout" value="로그아웃" />
</td>
</tr>
</table>
<script>
//테이블
var tblLogin = document.getElementById("tblLogin");
var tblLogout = document.getElementById("tblLogout");
//텍스트 박스
var txtid = document.getElementById("txtid");
var txtpwd = document.getElementById("txtpwd");
//체크박스
var ckbLogin = document.getElementById("ckbLogin");
//버튼
var btnLogin = document.getElementById("btnLogin");
var btnLogout = document.getElementById("btnLogout");
//
var members = [{id:"admin", pwd:"1234"}
,{id:"dayeon", pwd:"1111"}
,{id:"dongjun", pwd:"4321"}
];
var cname = "idsave";
var cvalue;
var exdays=10;
window.onload=function(){
// idsave 쿠키명으로 저장된 쿠키값이 존재하는지 확인
// 쿠키가 존재한다면
tblLogout.style.display = "none";
cvalue = getCookie(cname);
if (cvalue) {
ckbLogin.checked="checked";
txtid.value= cvalue;
txtpwd.focus();
} else {
txtid.focus();
}
//로그인 버튼 클릭
btnLogin.onclick = function() {
var id = txtid.value;
var pwd = txtpwd.value;
//입력받은 id, pwd을 가지고 members 뒤져서
//1. 로그인 성공
//2. 아이디가 존재하지 않습니다
//3. 비밀번호가잘못 되었습니다.
var message = [
"아이디가 존재하지 않습니다."//0
,"비밀번호가 잘못되었습니다"//1
,"로그인 성공"
];
var result = 0;
for (let m of members) {
if(m.id==id ){
result = 1;
if(m.pwd==pwd){
result=2;
break;
}//if
}//if
}//for
alert(message[result]);
if(result==2){
if(ckbLogin.checked){
setCookie(cname, id, exdays);
}else{
delCookie(cname);
}
//로그인 했다면 로그인 페이지는 안보이게 하기
tblLogin.style.display = "none";
tblLogout.style.display="block";
}
}
//로그아웃 버튼 클릭
btnLogout.onclick = function() {
tblLogin.style.display = "block";
tblLogout.style.display="none";
txtid.value="";
txtpwd.value="";
}
//장바구니 : 쿠키 사용해서 처리해도 된다
}
</script>
</body>
</html>
jQuery로 수정
<script>
var members = [{ id:"admin", pwd:"1234"}
,{id:"dayeon", pwd:"1111"}
,{id:"dongjun", pwd:"4321"}];
var cname = "idsave";
var cvalue ;
var exdays = 10;
$(function (){
$("#tblLogout").css("display", "none");
cvalue = getCookie(cname);
if (cvalue) {
$("#ckbLogin").prop("checked", true);
$("#txtid").val(cvalue);
$("#txtpwd").focus();
} else {
$("#txtid").focus();
} //
$("#btnLogin").click( function (){
var id = $("#txtid").val();
var pwd = $("#txtpwd").val();
var message = [
"아이디가 존재하지 않습니다." // 0
,"비밀번호가 잘못되었습니다." // 1
,"로그인 성공"]; // 2
var result = 0;
for (let m of members) {
if( m.id == id ){
result = 1;
if ( m.pwd == pwd) {
result = 2;
break;
} // if
} // if
} // for
alert(message[result]);
if (result == 2 ) {
if( $("#ckbLogin").prop("checked") ){
setCookie(cname, id, exdays);
}else{
delCookie(cname);
}
$("#tblLogin").css("display", "none");
$("#tblLogout").css("display", "block");
}
}); //
// 로그아웃 버튼 클릭
$("#btnLogout").click(function(event) {
$("#tblLogin").css("display", "block");
$("#tblLogout").css("display", "none");
});
// btnLogout 클릭
});
</script>
'Web > JavaScript' 카테고리의 다른 글
[days08] autocomplete() (0) | 2020.12.18 |
---|---|
[days08] 모달(modal)/모달리스 (0) | 2020.12.18 |
[days07] js 팝업상자(대화상자), 클릭시 랜덤 이미지 발생 (0) | 2020.12.17 |
[days07] js BOM (0) | 2020.12.17 |
[days07] DOM사용 예시 (0) | 2020.12.17 |