JavaScript 쿠키에서 값을 생성하고 읽는 방법은 무엇입니까?
JavaScript 쿠키에서 값을 생성하고 읽는 방법은 무엇입니까?
답변:
쿠키 생성 및 검색에 사용할 수있는 기능은 다음과 같습니다.
function createCookie(name, value, days) {
var expires;
if (days) {
var date = new Date();
date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
expires = "; expires=" + date.toGMTString();
}
else {
expires = "";
}
document.cookie = name + "=" + value + expires + "; path=/";
}
function getCookie(c_name) {
if (document.cookie.length > 0) {
c_start = document.cookie.indexOf(c_name + "=");
if (c_start != -1) {
c_start = c_start + c_name.length + 1;
c_end = document.cookie.indexOf(";", c_start);
if (c_end == -1) {
c_end = document.cookie.length;
}
return unescape(document.cookie.substring(c_start, c_end));
}
}
return "";
}
최소한의 모든 기능을 갖춘 ES6 접근 방식 :
const setCookie = (name, value, days = 7, path = '/') => {
const expires = new Date(Date.now() + days * 864e5).toUTCString()
document.cookie = name + '=' + encodeURIComponent(value) + '; expires=' + expires + '; path=' + path
}
const getCookie = (name) => {
return document.cookie.split('; ').reduce((r, v) => {
const parts = v.split('=')
return parts[0] === name ? decodeURIComponent(parts[1]) : r
}, '')
}
const deleteCookie = (name, path) => {
setCookie(name, '', -1, path)
}
toGMTString()
더 이상 사용되지 않습니다 toUTCString()
. 대신 사용하십시오.
=
부호 가 포함될 수 있습니다 . 이 경우 함수 getCookie
는 예기치 않은 결과를 생성합니다. 이를 피하기 위해 내부에 다음 화살표 기능 바디를 사용하십시오.const [n, ...val] = v.split('='); return n === name ? decodeURIComponent(val.join('=')) : r
864e5 = 86400000 = 1000*60*60*24
24 시간의 밀리 초 수를 나타냅니다.
또는 일반 자바 스크립트 :
function setCookie(c_name,value,exdays)
{
var exdate=new Date();
exdate.setDate(exdate.getDate() + exdays);
var c_value=escape(value) + ((exdays==null) ? "" : ("; expires="+exdate.toUTCString()));
document.cookie=c_name + "=" + c_value;
}
function getCookie(c_name)
{
var i,x,y,ARRcookies=document.cookie.split(";");
for (i=0; i<ARRcookies.length; i++)
{
x=ARRcookies[i].substr(0,ARRcookies[i].indexOf("="));
y=ARRcookies[i].substr(ARRcookies[i].indexOf("=")+1);
x=x.replace(/^\s+|\s+$/g,"");
if (x==c_name)
{
return unescape(y);
}
}
}
Mozilla는 쿠키 를 사용하고 사용하는 예제 와 함께 완전한 유니 코드를 지원하는 쿠키를 읽고 쓰는 간단한 프레임 워크를 제공 합니다.
페이지에 포함되면 쿠키를 설정할 수 있습니다.
docCookies.setItem(name, value);
쿠키를 읽으십시오 :
docCookies.getItem(name);
또는 쿠키를 삭제하십시오.
docCookies.removeItem(name);
예를 들면 다음과 같습니다.
// sets a cookie called 'myCookie' with value 'Chocolate Chip'
docCookies.setItem('myCookie', 'Chocolate Chip');
// reads the value of a cookie called 'myCookie' and assigns to variable
var myCookie = docCookies.getItem('myCookie');
// removes the cookie called 'myCookie'
docCookies.removeItem('myCookie');
Mozilla의 document.cookie 페이지 에서 더 많은 예제와 세부 사항을 참조하십시오 .
이 간단한 js 파일의 버전은 github에 있습니다.
get ()에 대한 정규식을 사용하는 ES7. MDN 기반
const Cookie =
{ get: name => {
let c = document.cookie.match(`(?:(?:^|.*; *)${name} *= *([^;]*).*$)|^.*$`)[1]
if (c) return decodeURIComponent(c)
}
, set: (name, value, opts = {}) => {
if (opts.days) {
opts['max-age'] = opts.days * 60 * 60 * 24;
delete opts.days
}
opts = Object.entries(opts).reduce((str, [k, v]) => `${str}; ${k}=${v}`, '')
document.cookie = name + '=' + encodeURIComponent(value) + opts
}
, delete: (name, opts) => Cookie.set(name, '', {'max-age': -1, ...opts})
// path & domain must match cookie being deleted
}
Cookie.set('user', 'Jim', {path: '/', days: 10})
// Set the path to top level (instead of page) and expiration to 10 days (instead of session)
사용법-Cookie.get (name, value [, options]) :
옵션은 모든 표준 쿠키 옵션을 지원하고 "일"을 추가합니다.
다른 답변은 이전 IE 버전을 지원하기 위해 "max-age"대신 "expires"를 사용합니다. 이 방법에는 ES7이 필요하므로 IE7은 어쨌든 나오지 않습니다 (이것은별로 중요하지 않습니다).
참고 : "="및 "{:}"과 같은 재미있는 문자는 쿠키 값으로 지원되며 정규 표현식은 앞뒤 공백을 처리합니다 (다른 라이브러리에서).
객체를 저장하려면 JSON.stringify 및 JSON.parse를 사용하여 전후에 인코딩하거나 위의 내용을 편집하거나 다른 방법을 추가하십시오. 예 :
Cookie.getJSON = name => JSON.parse(Cookie.get(name))
Cookie.setJSON = (name, value, opts) => Cookie.set(name, JSON.stringify(value), opts);
{foo : 'bar'}와 같은 객체를 저장 해야하는 사람들을 위해 편집 한 @KevinBurke의 답변 버전을 공유합니다. JSON.stringify와 JSON.parse를 추가했습니다.
cookie = {
set: function (name, value, days) {
if (days) {
var date = new Date();
date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
var expires = "; expires=" + date.toGMTString();
}
else
var expires = "";
document.cookie = name + "=" + JSON.stringify(value) + expires + "; path=/";
},
get : function(name){
var nameEQ = name + "=",
ca = document.cookie.split(';');
for(var i=0;i < ca.length;i++) {
var c = ca[i];
while (c.charAt(0)==' ') c = c.substring(1,c.length);
if (c.indexOf(nameEQ) == 0)
return JSON.parse(c.substring(nameEQ.length,c.length));
}
return null;
}
}
이제 다음과 같은 작업을 수행 할 수 있습니다.
cookie.set('cookie_key', {foo: 'bar'}, 30);
cookie.get('cookie_key'); // {foo: 'bar'}
cookie.set('cookie_key', 'baz', 30);
cookie.get('cookie_key'); // 'baz'
이 스레드의 수락 된 답변을 이미 여러 번 사용했습니다. 간단하고 사용하기 쉬운 훌륭한 코드입니다. 그러나 나는 일반적으로 babel 과 ES6 및 모듈을 사용하므로 나와 같은 경우 ES6으로 더 빨리 개발하기 위해 복사하는 코드가 있습니다.
ES6에서 모듈로 다시 작성된 허용 된 답변 :
export const createCookie = ({name, value, days}) => {
let expires;
if (days) {
let date = new Date();
date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
expires = '; expires=' + date.toGMTString();
} else {
expires = '';
}
document.cookie = name + '=' + value + expires + '; path=/';
};
export const getCookie = ({name}) => {
if (document.cookie.length > 0) {
let c_start = document.cookie.indexOf(name + '=');
if (c_start !== -1) {
c_start = c_start + name.length + 1;
let c_end = document.cookie.indexOf(';', c_start);
if (c_end === -1) {
c_end = document.cookie.length;
}
return unescape(document.cookie.substring(c_start, c_end));
}
}
return '';
};
그리고 나서 당신은 단순히 어떤 모듈로도 가져올 수 있습니다 (물론 경로는 다를 수 있습니다) :
import {createCookie, getCookie} from './../helpers/Cookie';
다음 은 JavaScript에서 쿠키를 가져오고 설정하고 삭제 하는 코드 입니다.
function getCookie(name) {
name = name + "=";
var cookies = document.cookie.split(';');
for(var i = 0; i <cookies.length; i++) {
var cookie = cookies[i];
while (cookie.charAt(0)==' ') {
cookie = cookie.substring(1);
}
if (cookie.indexOf(name) == 0) {
return cookie.substring(name.length,cookie.length);
}
}
return "";
}
function setCookie(name, value, expirydays) {
var d = new Date();
d.setTime(d.getTime() + (expirydays*24*60*60*1000));
var expires = "expires="+ d.toUTCString();
document.cookie = name + "=" + value + "; " + expires;
}
function deleteCookie(name){
setCookie(name,"",-1);
}
출처 : http://mycodingtricks.com/snippets/javascript/javascript-cookies/
이 개체를 사용합니다. 값은 인코딩되므로 서버 측에서 읽거나 쓸 때 고려해야합니다.
cookie = (function() {
/**
* Sets a cookie value. seconds parameter is optional
*/
var set = function(name, value, seconds) {
var expires = seconds ? '; expires=' + new Date(new Date().getTime() + seconds * 1000).toGMTString() : '';
document.cookie = name + '=' + encodeURIComponent(value) + expires + '; path=/';
};
var map = function() {
var map = {};
var kvs = document.cookie.split('; ');
for (var i = 0; i < kvs.length; i++) {
var kv = kvs[i].split('=');
map[kv[0]] = decodeURIComponent(kv[1]);
}
return map;
};
var get = function(name) {
return map()[name];
};
var remove = function(name) {
set(name, '', -1);
};
return {
set: set,
get: get,
remove: remove,
map: map
};
})();
쿠키 가져 오기 / 설정 / 제거에 쿠키 ES 모듈 을 사용할 수 있습니다 .
헤드 태그에 다음 코드를 포함하십시오.
<script src="https://raw.githack.com/anhr/cookieNodeJS/master/build/cookie.js"></script>
또는
<script src="https://raw.githack.com/anhr/cookieNodeJS/master/build/cookie.min.js"></script>
이제 웹 페이지에 사용자 정보를 저장하기 위해 window.cookie를 사용할 수 있습니다.
웹 브라우저에서 쿠키가 활성화되어 있습니까?
returns {boolean} true if cookie enabled.
예
if ( cookie.isEnabled() )
console.log('cookie is enabled on your browser');
else
console.error('cookie is disabled on your browser');
쿠키를 설정하십시오.
name: cookie name.
value: cookie value.
예
cookie.set('age', 25);
쿠키를 얻으십시오.
name: cookie name.
defaultValue: cookie default value. Default is undefined.
returns cookie value or defaultValue if cookie was not found
예
var age = cookie.get('age', 25);
쿠키를 제거하십시오.
name: cookie name.
예
cookie.remove( 'age' );
readCookie의 개선 된 버전 :
function readCookie( name )
{
var cookieParts = document.cookie.split( ';' )
, i = 0
, part
, part_data
, value
;
while( part = cookieParts[ i++ ] )
{
part_data = part.split( '=' );
if ( part_data.shift().replace(/\s/, '' ) === name )
{
value = part_data.shift();
break;
}
}
return value;
}
쿠키 값을 찾아서 그 값을 반환하자마자 중단됩니다. 제 생각에는 이중 분할로 매우 우아합니다.
if 조건에 대한 교체는 공백 트림으로 올바르게 일치하는지 확인합니다.
function setCookie(cname,cvalue,exdays) {
var d = new Date();
d.setTime(d.getTime() + (exdays*24*60*60*1000));
var expires = "expires=" + d.toGMTString();
document.cookie = cname+"="+cvalue+"; "+expires;
}
function getCookie(cname) {
var name = cname + "=";
var ca = document.cookie.split(';');
for(var i=0; i<ca.length; i++) {
var c = ca[i];
while (c.charAt(0)==' ') c = c.substring(1);
if (c.indexOf(name) == 0) {
return c.substring(name.length, c.length);
}
}
return "";
}
function checkCookie() {
var user=getCookie("username");
if (user != "") {
alert("Welcome again " + user);
} else {
user = prompt("Please enter your name:","");
if (user != "" && user != null) {
setCookie("username", user, 30);
}
}
}
간단한 cookieUtils를 작성했습니다. 쿠키를 만들고 쿠키를 읽고 쿠키를 삭제하는 세 가지 기능이 있습니다.
var CookieUtils = {
createCookie: function (name, value, expireTime) {
expireTime = !!expireTime ? expireTime : (15 * 60 * 1000); // Default 15 min
var date = new Date();
date.setTime(date.getTime() + expireTime);
var expires = "; expires=" + date.toGMTString();
document.cookie = name + "=" + value + expires + "; path=/";
},
getCookie: function (name) {
var value = "; " + document.cookie;
var parts = value.split("; " + name + "=");
if (parts.length == 2) {
return parts.pop().split(";").shift();
}
},
deleteCookie: function(name) {
document.cookie = name +'=; Path=/; Expires=Thu, 01 Jan 1970 00:00:01 GMT;';
}
};
여기 에 언급 된 w3chools 의 예가 있습니다 .
function setCookie(cname, cvalue, exdays) {
var d = new Date();
d.setTime(d.getTime() + (exdays*24*60*60*1000));
var expires = "expires="+ d.toUTCString();
document.cookie = cname + "=" + cvalue + ";" + expires + ";path=/";
}
function getCookie(cname) {
var name = cname + "=";
var decodedCookie = decodeURIComponent(document.cookie);
var ca = decodedCookie.split(';');
for(var i = 0; i <ca.length; i++) {
var c = ca[i];
while (c.charAt(0) == ' ') {
c = c.substring(1);
}
if (c.indexOf(name) == 0) {
return c.substring(name.length, c.length);
}
}
return "";
}
쿠키를 읽는 건방진 간단한 방법은 다음과 같습니다.
let username, id;
eval(document.cookie);
console.log(username + ", " + id); // John Doe, 123
쿠키에 다음과 같은 내용이 포함되어 있음을 알고있는 경우 사용할 수 있습니다 username="John Doe"; id=123;
. 쿠키에는 문자열에 따옴표가 필요합니다. 권장되는 방법은 아니지만 테스트 / 학습에 효과적입니다.