Cookie ã¯ãã©ã¦ã¶ã«ç´æ¥æ ¼ç´ãããå°ããªæååãã¼ã¿ã§ããããã㯠JavaScript ã®ä¸é¨ã§ã¯ãªããRFC 6265 仿§ã§å®ç¾©ããã¦ãã HTML ãããã³ã« ã®ä¸é¨ã§ãã
å¤ãã®å ´åãCookie㯠Web ãµã¼ãã«ãã£ã¦è¨å®ããã¾ãã
Cookie ã®æãåºã使ããã¦ããç¨éã®1ã¤ã¯èªè¨¼ã§ã:
- ãµã¤ã³ã¤ã³ããã¨ããµã¼ã㯠Cookie ã« âã»ãã·ã§ã³IDâ ãã»ããããããã«ãå¿çã«
Set-CookieHTTP ãããã使ç¨ãã¾ãã - ãã©ã¦ã¶ã¯ Cookie ãæ ¼ç´ãã¾ãã
- 次åãåããã¡ã¤ã³ã¸ã®ãªã¯ã¨ã¹ããè¡ãããã¨ãããã©ã¦ã¶ã¯
CookieHTTPãããã使ç¨ãã¦ãããä¸ã«éä¿¡ãã¾ãã - ãã®ããããµã¼ãã¯èª°ããªã¯ã¨ã¹ããè¡ã£ãã®ããç¥ããã¨ãã§ãã¾ãã
ãã©ã¦ã¶ã¯ Cookie ã®ããã®ç¹å¥ãªã¢ã¯ã»ãµ document.cookie ãæä¾ãã¾ãã
Cookie ã¨ãã®ãªãã·ã§ã³ã«ã¤ãã¦ã¯ãå¤ãã®æ³¨æç¹ãããã¾ãããã®ãã£ãã¿ã¼ã§ã¯ããããã®è©³ç´°ã説æãã¦ãã¾ãã
document.cookie ããã®èªã¿è¾¼ã¿
ãã®ãµã¤ãã« Cookie ã¯ããã§ããããï¼è¦ã¦ã¿ã¾ããã:
// javascript.info ã§ã¯çµ±è¨ã®ããã« Google Analytics ã使ç¨ãã¦ãã¾ã,
// ãã®ãããããã¤ãã® Cookie ãããã¯ãã§ã
alert( document.cookie ); // cookie1=value1; cookie2=value2;...
æåå㯠name=value ã®ãã¢ãããªãã ; ã«ããåºåããã¾ãããããããå¥ã® Cookie ã§ãã
ç¹å®ã® Cookie ãè¦ã¤ããã«ã¯ã; ã§ document.cookie ãåå²ããæ£ããååãè¦ã¤ãã¾ãããããããã®ã«ãæ£è¦è¡¨ç¾ãããã¯é
å颿°ã使ãã¾ãã
document.cookie ã¸ã®æ¸ãè¾¼ã¿
document.cookie ã¸æ¸ãè¾¼ãäºãã§ãã¾ãããããããã¼ã¿ããããã£ã§ã¯ãªãã¢ã¯ã»ãµãå©ç¨ãã¾ãã
document.cookie ã¸ã®æ¸ãè¾¼ã¿æä½ã¯ãã©ã¦ã¶ãéãã¦è¡ãããããã«è¨è¼ããã¦ãã Cookie ãæ´æ°ãã¾ãããä»ã® Cookie ã«ã¯è§¦ãã¾ããã
ä¾ãã°ããã®å¼ã³åºãã¯ååã user ã§å¤ã John ã® Cookie ãã»ãããã¾ãã:
document.cookie = "user=John"; // ååã `user` ã® Cookie ã ããæ´æ°ãã¾ã
alert(document.cookie); // ãã¹ã¦ã® Cookie ã表示ãã¾ã
å®è¡ããã¨ãããããè¤æ°ã® Cookie ãè¦ããã§ãããããªããªããdocument.cookie= æä½ã¯ãã¹ã¦ã®ã¯ããã¼ã䏿¸ãããã®ã§ã¯ãªããuser ã ãã䏿¸ãããããã§ãã
æè¡çã«ã¯ãååã¨å¤ã¯ä»»æã®æåãå¯è½ã§ããããã©ã¼ããããæå¹ã«ä¿ã¤ããã«ã¯ãçµã¿è¾¼ã¿ã® encodeURIComponent 颿°ã使ã£ã¦ã¨ã¹ã±ã¼ãããå¿
è¦ãããã¾ãã:
// ç¹å¥ãªå¤, ã¨ã³ã³ã¼ããå¿
è¦ã§ã
let name = "<>";
let value = "="
// Cookie ã %3C%3E=%3D ã¨ã¨ã³ã³ã¼ã
document.cookie = encodeURIComponent(name) + '=' + encodeURIComponent(value);
alert(document.cookie); // ...; %3C%3E=%3D
ããã¤ãã®å¶éãããã¾ã:
encodeURIComponentå¾ã®name=valueãã¢ã¯ 4KB ãè¶ ãã¦ã¯ããã¾ããããªã®ã§ã Cookie ã«å¤§ããªãã¼ã¿ãæ ¼ç´ãããã¨ã¯ã§ãã¾ããã- ãã¡ã¤ã³æ¯ã® Cookie ã®ç·æ°ã¯ 20+ ã§å¶éããã¦ãã¾ã(æ£ç¢ºãªæ°åã¯ãã©ã¦ã¶ã«ä¾åãã¾ã)ã
Cookie ã¯ããã¤ãã®ãªãã·ã§ã³ãæã£ã¦ããããã®å¤ãã¯éè¦ã§è¨å®ããã¹ããã®ã§ãã
ãªãã·ã§ã³ã¯ key=value ã®å¾ã«ãªã¹ãããã; ã§åºåããã¾ããæ¬¡ã®ããã«ãªãã¾ãã:
document.cookie = "user=John; path=/; expires=Tue, 19 Jan 2038 03:14:07 GMT"
path
path=/mypath
Cookie ã¸ã¢ã¯ã»ã¹å¯è½ãª URL ãã¹ãã¬ãã£ãã¯ã¹ã§ãã絶対å¤ã§ãªããã°ãªãã¾ãããããã©ã«ãã§ã¯ç¾å¨ã®ãã¹ã«ãªãã¾ãã
Cookie ã path=/mypath ã§è¨å®ãããå ´åããã㯠/mypath 㨠/mypath/* ã§è¦ãã¾ããã/page ã /mypathpage ã§ã¯è¦ãã¾ããã
é常ã¯ããã¹ã¦ã® Webãµã¤ãã®ãã¼ã¸ãã Cookie ã¸ã¢ã¯ã»ã¹ã§ãããããpath=/ ãè¨å®ãã¾ãã
domain
domain=site.com
Cookie ã¸ã¢ã¯ã»ã¹å¯è½ãªãã¡ã¤ã³ã§ãã
ããã©ã«ãã§ã¯ãCookie ã¯ãããè¨å®ãããã¡ã¤ã³ã§ã®ã¿ã¢ã¯ã»ã¹å¯è½ã§ãããã®ãããCookie ã site.com ã§è¨å®ããã¦ããå ´åã other.com ã§ã¯åå¾ã§ãã¾ããã
â¦ããããããæ³¨æãå¿
è¦ãªãã¨ã«ããµããã¡ã¤ã³ forum.site.com ã§ã Cookie ã¯åå¾ã§ãã¾ãã:
// at site.com
document.cookie = "user=John"
// at forum.site.com
alert(document.cookie); // no user
å¥ã®ç¬¬2ã¬ãã«ã®ãã¡ã¤ã³ãã Cookie ã«ã¢ã¯ã»ã¹ãããæ¹æ³ã¯ããã¾ããããã®ãããother.com ã site.com ã§è¨å®ããã Cookie ãåãåããã¨ã¯ããã¾ããã
ããã¯æ©å¯ãã¼ã¿ã Cookie ã«ä¿æãããã¨ãã§ããããã«ããããã®ãå®å ¨ä¸ã®å¶éã§ãã
â¦ã§ãããforum.site.com ãªã©ã®ãµããã¡ã¤ã³ã¸ã®ã¢ã¯ã»ã¹ã許å¯ãããå ´åãããã¯å¯è½ã§ãããã®å ´åã«ã¯ãæç¤ºçã« domain ãªãã·ã§ã³ãã«ã¼ããã¡ã¤ã³ã«è¨å®ãã¾ã: domain=site.com:
// site.com ã§ä»»æã®ãµããã¡ã¤ã³ã§ Cookie ã«ã¢ã¯ã»ã¹ã§ããããã«ãã¾ã
document.cookie = "user=John; domain=site.com"
// forum.site.com
alert(document.cookie); // with user
æ´å²çãªçç±ãããdomain=.site.com (ãããéå§)ããã®ããã«æ©è½ãã¾ããé常ã«å¤ããã©ã¦ã¶ããµãã¼ãããã«ã¯ãããã追å ãã¦ããã®ãããã§ãããã
expires, max-age
ããã©ã«ãã§ã¯ãCookie ããããã®ã©ã®ãªãã·ã§ã³ãæã£ã¦ããªãå ´åããã©ã¦ã¶ãéããããã¨ãã«æ¶ãã¾ãããã®ãã㪠Cookie 㯠âã»ãã·ã§ã³ã¯ããã¼â ã¨å¼ã°ãã¾ãã
ãã©ã¦ã¶ãéãã¦ã Cookie ãçåãããã«ã¯ãexpires ããã㯠max-age ãªãã·ã§ã³ãè¨å®ãã¾ãã
expires=Tue, 19 Jan 2038 03:14:07 GMT
ãã©ã¦ã¶ãèªåçã« Cookie ãåé¤ãããCookie ã®æå¹æéã§ãã
æ¥ä»ã¯ GMT ã¿ã¤ã ã¾ã¼ã³ã®æ£ç¢ºãªå½¢å¼ã§ãªããã°ãªãã¾ããããã㯠date.toUTCString ã§åå¾ã§ãã¾ããä¾ãã°ãCookie ã®æå¹æéã1æ¥ã«è¨å®ããå ´åã¯æ¬¡ã®ããã«ãªãã¾ãã:
// ãã¾ãã +1 æ¥
let date = new Date(Date.now() + 86400e3);
date = date.toUTCString();
document.cookie = "user=John; expires=" + date;
ãã expires ãéå»ã«è¨å®ããã¨ãCookie ã¯åé¤ããã¾ãã
max-age=3600
expires ã®ä»£æ¿ã¨ãã¦ãCookie ã®æå¹æéãç§ã§æå®ãã¾ãã
ç¾æç¹ããã®ç§æ°ãã¾ãã¯å³ææå¹æéåãã®å ´å(Cookie ãåé¤ããããã«)ã¯ã¼ã/è² ã®å¤ãæå®ã§ãã¾ãã:
// cookie ã¯ä»ãã1æéå¾ã«æ¶ãã¾ã
document.cookie = "user=John; max-age=3600";
// cookie åé¤(ããã«æå¹æéåãã«ãã)
document.cookie = "user=John; max-age=0";
secure
secure
Cookie 㯠HTTPS çµç±ã§ã®ã¿è»¢éããã¹ãã§ãã
ããã©ã«ãã§ã¯ãCookie ã http://site.com ã«ã»ããããå ´åããã㯠https://site.com ã«ãç¾ãã¾ããããã¦ãã®éããããã§ãã
ã¤ã¾ããCookie ã¯ãã¡ã¤ã³ã®ã¿ããã§ãã¯ãã¦ããããããã³ã«ãåºå¥ãã¾ããã
ãã®ãªãã·ã§ã³ã§ã¯ãCookie ã https://site.com ã§ã»ãããããå ´åããã®å¾ http://site.com ã®ããã« HTTP ã§åããµã¤ãã«ã¢ã¯ã»ã¹ãã¦ã Cookie ã¯ç¾ãã¾ããããã®ãããCookie ã«æå·åããã¦ããªã HTTP çµç±ã§éä¿¡ãããã¹ãã§ã¯ãªãæ©å¯ã³ã³ãã³ããå«ã¾ãã¦ããå ´åããã®ãã©ã°ã§é²ãäºãã§ãã¾ãã
// Cookie ãã»ãã¥ã¢ã«è¨å® (HTTPS çµç±ã§ã®ã¿ã¢ã¯ã»ã¹å¯è½)
document.cookie = "user=John; secure";
samesite
ããã¯ããããã XSRF (ã¯ãã¹ãµã¤ããªã¯ã¨ã¹ããã©ã¼ã¸ã§ãª)æ»æããä¿è·ããããã®ããã1ã¤ã®ã»ãã¥ãªãã£ãªãã·ã§ã³ã§ãã
ãã¤å½¹ç«ã¤ã®ããçè§£ããããã«ãæ¬¡ã®æ»æã·ããªãªãç´¹ä»ãã¾ãããã
XSRF æ»æ
æ³åãã¦ãã ãããããªãã¯ãµã¤ã bank.com ã«ãã°ã¤ã³ãã¾ãããã¤ã¾ã:ããªãã¯ãã®ãµã¤ãããã®èªè¨¼ Cookie ãæã£ã¦ãã¾ãããã©ã¦ã¶ã¯ãããªããèªèãã¦ããã¹ã¦ã®æ
éã«æ±ãã¹ãéèæä½ãå®è¡ããããã«ããªã¯ã¨ã¹ãæ¯ã« Cookie ã bank.com ã«éä¿¡ãã¾ãã
ãã¾ãå¥ã®ã¦ã£ã³ãã¦ã§ Web ããã©ã¦ã¸ã³ã°ãã¦ããã¨ãå¥ã®ãµã¤ã evil.com ã«ãã£ã¦ãã¾ãããããã¦ãããã¯ããã«ã¼ã®ã¢ã«ã¦ã³ããæã¤ <form action="https://bank.com/pay"> ã¨ãèªåçã«ãµãããããã JavaScript ã³ã¼ããæã£ã¦ãã¾ãã
ãã®ãã©ã¼ã 㯠evil.com ããç´æ¥éè¡ã®ãµã¤ãã«éä¿¡ãããããªãã® Cookie ãéä¿¡ããã¾ãããªããªããããªãã bank.com ã«è¨ªãããã³ã«éä¿¡ãããããã§ãããã®ãããéè¡ã¯ããªããèªèããå®éã«æ¯æããå®è¡ãã¾ãã
ããã¯ã¯ãã¹ãµã¤ããªã¯ã¨ã¹ããã©ã¼ã¸ã§ãª(ã¾ã㯠XSRF)æ»æã¨å¼ã°ãã¾ãã
ãã¡ãããå®éã®éè¡ã¯ããããä¿è·ããã¦ãã¾ããbank.com ã«ãã£ã¦çæããããã¹ã¦ã®ãã©ã¼ã ã¯ãâxsrf ä¿è·ãã¼ã¯ã³â ã¨å¼ã°ããç¹å¥ãªãã£ã¼ã«ããæã£ã¦ãããæªæã®ãããã¼ã¸ã¯ãããçæãããã¨ãããªã¢ã¼ããã¼ã¸ããä½ããã®å½¢ã§æ½åºãããã¨ãã§ãã¾ãã(ããã«ãã©ã¼ã ãéä¿¡ãããã¨ã¯ã§ãã¾ããããã¼ã¿ãæ»ããã¨ã¯ã§ãã¾ãã)ã
Cookie samesite ãªãã·ã§ã³ãå ¥åãã
ãã¾ãCookie samesite ãªãã·ã§ã³ã¯ãã®ãããªæ»æããä¿è·ããããã®ãã1ã¤ã®æ¹æ³ãæä¾ãã¾ããããã¯(çè«çã«ã¯)ãâxsrf ä¿è·ãã¼ã¯ã³â ãå¿
è¦ã¨ãã¾ããã
2ã¤ã®ã¨ãå¾ãå¤ãããã¾ã:
samesite=strict, å¤ãªãã®samesiteã¨åãã§ã
ã¦ã¼ã¶ããµã¤ãã®å¤ããããå ´åãsamesite=strict ãæã¤ Cookie ã¯æ±ºãã¦éä¿¡ããã¾ããã
è¨ãæããã¨ãã¦ã¼ã¶ãã¡ã¼ã«ã«ãããªã³ã¯ã辿ã£ãå ´åããevil.com ããã®ãã©ã¼ã ãéä¿¡ããå ´åããããã¯ä»ã®ãã¡ã¤ã³ããçãããµã¤ãã«é¢ããä»»æã®æä½ãããå ´åãCookie ã¯éä¿¡ããã¾ããã
ããã¦ãXSRF æ»æã¯å¤±æãã¾ãããªããªããbank.com 㯠Cookie ããªãã®ã§ã¦ã¼ã¶ãèªèãããæ¯æãã«ã¯é²ããªãã§ãããã
ãã®ä¿è·ã¯ã¨ã¦ãä¿¡é ¼ã§ãã¾ããbank.com ããã®æä½ã®ã¿ samesite ã® Cookie ãéä¿¡ãã¾ãã
ããããªãããå¤å°ã®ä¸ä¾¿ãããã¾ãã
ã¦ã¼ã¶ããèªèº«ã®ã¡ã¢ãªã©ãã bank.com ã¸ã®æ£å½ãªãªã³ã¯ã辿ã£ãéãbank.com ãããããèªèããªããã¨ã«é©ãã§ãããã確ãã«ãsamesite=strict Cookie ã¯ãã®ã±ã¼ã¹ã§ã¯éä¿¡ããã¾ããã
2ã¤ã®Cookieã使ã£ã¦åé¿ãããã¨ãã§ãã¾ã: 1ã¤ã¯ âä¸è¬çãªèªèâ ç¨ã§ãâHello, Johnâ ã¨ããããã ãã®ãã®ã§ãããã1ã¤ã¯ samesite=strict ãæã¤ãã¼ã¿å¤æ´ç¨ã®ãã®ã§ãã
ããã¨ããµã¤ãã®å¤ããæ¥ãäººã¯æè¿(âHello, Johnâ)ãåãã¾ãããæ¯æãã¯éè¡ã®Webãµã¤ãããå§ããããªããã°ãªãã¾ããã
samesite=lax
ã¦ã¼ã¶ä½é¨ãç¶æããããã®ãã1ã¤ã®ã¢ããã¼ãã¯ãããå¯å®¹ãªå¤ã§ãã samesite=lax ã使ããã¨ã§ãã
Lax ã¢ã¼ãã§ã¯ãstrict ã®ããã«ããµã¤ãã®å¤ããæ¥ãã¨ãã«ãã©ã¦ã¶ã Cookie ãéä¿¡ããã®ãç¦æ¢ãã¾ãããä¾å¤ãããã¾ãã
samesite=lax ã® Cookie ã¯ããããã®æ¡ä»¶ã両æ¹ã¨ã true ã®å ´åã«éä¿¡ããã¾ãã:
-
HTTP ã¡ã½ããã âå®å ¨â ã§ãã(e.g. POST ã§ã¯ãªã GET)ã
å®å ¨ãªHTTP ã¡ã½ããã®å®å ¨ãªãªã¹ã㯠RFC7231 specification ã«ããã¾ããåºæ¬çã«ããããã¯ãã¼ã¿ã®èªã¿åãã®ããã«ä½¿ç¨ããããã¼ã¿æ¸ãè¾¼ã¿ã«ã¯ä½¿ç¨ããã¹ãã§ãªãã¡ã½ããã§ãããã¼ã¿å¤æ´æä½ãå®è¡ãã¦ã¯ããã¾ããããªã³ã¯ããã©ããã¨ã¯ã常ã«GET(å®å ¨ãªã¡ã½ãã)ã§ãã
-
æä½ã¯æä¸ä½ã®ããã²ã¼ã·ã§ã³ã§å®è¡ããã(ãã©ã¦ã¶ã®ã¢ãã¬ã¹ãã¼ã® URL ã夿´ãã)
ããã¯é常 true ã§ãããããã²ã¼ã·ã§ã³ã
<iframe>ã§å®è¡ãããå ´åãããã¯æä¸ä½ã§ã¯ããã¾ãããã¾ããAJAX ãªã¯ã¨ã¹ãã¯ã©ã®ããã²ã¼ã·ã§ã³ãè¡ããªãããããã®æ¡ä»¶ã«ã¯ããããã¾ããã
ãããã£ã¦ãsamesite=lax ãè¡ããã¨ã¯ãåºæ¬çã«æãä¸è¬ç㪠âURL ãéãâ ã¨ããæä½ã§ Cookie ãå©ç¨ã§ããããã«ãããã¨ã§ããä»ã®ãµã¤ãããã®AJAXãªã¯ã¨ã¹ãããã©ã¼ã éä¿¡ãªã©ãããè¤éãªãã¨ãããã¨ãã«ã¯ Cookie ã失ãã¾ãã
ããã§åé¡ãªãã®ã§ããã°ãsamesite=lax ã追å ãã¦ãããããã¦ã¼ã¶ã¼ä½é¨ãæãªããã¨ã¯ãªããä¿è·ã追å ã§ããã§ãããã
å
¨ä½çã«è¦ã¦ãsamesite ã¯ç´ æ´ãããã§ãããéè¦ãªæ¬ ç¹ãããã¾ãã:
- å¤ããã©ã¦ã¶(2017å¹´ããã) ã§ã¯
samesiteã¯ãµãã¼ãããã¦ããããç¡è¦ããã¾ãã
ãã®ãããä¿è·ãæä¾ããããã« samesite ã ãã«é ¼ã£ãå ´åãå¤ããã©ã¦ã¶ã¯å®å
¨ã«èå¼±ã«ãªãã§ãããã
ããããxsrf ãã¼ã¯ã³ãªã©ä»ã®ä¿è·ææ®µã¨åãã㦠samesite ã使ç¨ãã追å ã®é²å¾¡å±¤ã追å ãããã¨ãã§ãã¾ãã
httpOnly
ãã®ãªãã·ã§ã³ã¯ JavaScript ã¨ã¯é¢ä¿ããã¾ããããããã§ã¯å®å ¨æ§ã®ããã«è¨åããå¿ è¦ãããã¾ãã
ãµã¼ãã Cookie ãè¨å®ããããã« Set-Cookie ã使ãã¨ããhttpOnly ãªãã·ã§ã³ãè¨å®ãããã¨ãã§ãã¾ãã
ãã®ãªãã·ã§ã³ã¯ãä»»æã®JavaScript ã Cookie ã¸ã¢ã¯ã»ã¹ãããã¨ãç¦æ¢ãã¾ããæã
ã¯ãdocument.cookie ã使ã£ã¦ãã®ãã㪠Cookie ãè¦ããæä½ãããã¨ã¯ã§ãã¾ããã
ããã¯ãããã«ã¼ãèªåã® JavaScript ã³ã¼ãããã¼ã¸ã«æ¿å ¥ããã¦ã¼ã¶ããã®ãã¼ã¸ã«è¨ªåããã®ãå¾ ã¤ã¨ãã£ãç¹å®ã®æ»æããä¿è·ããããã®äºé²çã¨ãã¦ä½¿ããã¾ããããã«ã¼ãæã ã®ãµã¤ãã«ã³ã¼ããæ¿å ¥ãããã¨ãã§ããã¹ãã§ã¯ããã¾ããããããã«ã¼ã«ãããããã¦ãã¾ããã°ãããããããã¾ããã
é常ããã®ãããªãã¨ãèµ·ããã¦ã¼ã¶ãããã«ã¼ã®ã³ã¼ããå«ã¾ãã Web ãã¼ã¸ã訪ããã¨ããã®ã³ã¼ãã¯å®è¡ãããèªè¨¼æ
å ±ãå«ãã¦ã¼ã¶ã® Cookie ãæã¤ document.cookie ã¸ã®ã¢ã¯ã»ã¹ãå¾ã¾ããããã¯è¯ãããã¾ããã
ããããCookie ã httpOnly ã§ããã°ãdocument.cookie ã«ããã¯è¦ããªããããå®ããã¾ãã
ä»é²: Cookie 颿°
ããã«ããã®ã¯ãCookie ãæ±ãããã®é¢æ°ã®å°ããªã»ããã§ããæåã§ docment.cookie ã夿´ãããããã¯ããã«ä¾¿å©ã§ãã
ãã®ããã® Cookie ã©ã¤ãã©ãªã¯æ°å¤ãããã¾ãã®ã§ããããã¯å®å ¨ã«åä½ãã¾ããããã¢ç¨ã§ãã:
getCookie(name)
Cookie ã«ã¢ã¯ã»ã¹ããæãæ©ãæ¹æ³ã¯ æ£è¦è¡¨ç¾ ã使ããã¨ã§ãã
颿° getCookie(name) ã¯æå®ããã name ã® Cookie ãè¿ãã¾ãã:
// æå®ããã name ãæã¤ Cookie ãè¿ãã¾ã
// ãªããã° undefined ãè¿ãã¾ã
function getCookie(name) {
let matches = document.cookie.match(new RegExp(
"(?:^|; )" + name.replace(/([\.$?*|{}\(\)\[\]\\\/\+^])/g, '\\$1') + "=([^;]*)"
));
return matches ? decodeURIComponent(matches[1]) : undefined;
}
ããã§ã¯ããã®æ£è¦è¡¨ç¾ã¯ ; name=<value> ã«ãããããããåçã«çæããã¾ãã
Cookie ã®å¤ã¯ä»»æã®æååã«ãããã¨ãã§ãããã¨ã«çæãã¦ãã ããããããã©ã¼ããããç ´ãæåãå«ã¾ãã¦ããå ´å(ä¾ãã°ã¹ãã¼ã¹ã ; ã§ã)ããã®ãããªæåã¯ã¨ã³ã³ã¼ãããã¾ãã
ãã³ã¼ãããã«ã¯ãçµã¿è¾¼ã¿ã® decodeURIComponent 颿°ã使ãå¿
è¦ãããã¾ãã
setCookie(name, value, options)
ããã©ã«ãã§ã¯ãCookie name ã path=/ ãæã¤æå®ããã value ã«è¨å®ãã¾ã(ä»ã®ããã©ã«ãã追å ãããã夿´ãããã¨ãã§ãã¾ã)ã
function setCookie(name, value, options = {}) {
options = {
path: '/',
// å¿
è¦ã§ãã°ä»ã®ããã©ã«ãã追å ãã
...options
};
if (options.expires.toUTCString) {
options.expires = options.expires.toUTCString();
}
let updatedCookie = encodeURIComponent(name) + "=" + encodeURIComponent(value);
for (let optionKey in options) {
updatedCookie += "; " + optionKey;
let optionValue = options[optionKey];
if (optionValue !== true) {
updatedCookie += "=" + optionValue;
}
}
document.cookie = updatedCookie;
}
// 使ç¨ä¾:
setCookie('user', 'John', {secure: true, 'max-age': 3600});
deleteCookie(name)
Cookie ãåé¤ããããã«ã¯ãè² ã®æå¹æéã§ãããå¼ã³ã¾ãã:
function deleteCookie(name) {
setCookie(name, "", {
'max-age': -1
})
}
注æ: Cookie ã®æ´æ°/åé¤ãããã¨ããã»ããããã¨ãã¨æ£ç¢ºã«åããã¹ã¨ãã¡ã¤ã³ãªãã·ã§ã³ã使ç¨ããå¿ è¦ãããã¾ãã
ä¸ã¤ã«ã¾ã¨ãããã®ã§ã: cookie.js.
ä»é²: ãµã¼ããã¼ã㣠Cookie
ã¦ã¼ã¶ã訪ãã¦ãããã¡ã¤ã³ä»¥å¤ã®ãã¡ã¤ã³ã«ç½®ããã Cookie 㯠âãµã¼ããã¼ãã£â ã¨å¼ã°ãã¾ãã
ä¾:
-
site.comã®ãã¼ã¸ã¯å¥ã®ãµã¤ãããããã¼ããã¼ããã¾ãã:<img src="https://ads.com/banner.png"> -
ããã¼ã¨ä¸ç·ã«ã
ads.comã®ãªã¢ã¼ããµã¼ãã¯id=1234ã®ãã㪠Cookie ãæã¤Set-Cookieããããã»ããããããããã¾ããããã®ãã㪠Cookie ã¯ads.comãã¡ã¤ã³ããçºçããads.comã§ã®ã¿è¦ãã¾ãã: -
次å
ads.comã«ã¢ã¯ã»ã¹ããã£ãã¨ãããªã¢ã¼ããµã¼ãã¯idCookie ãåå¾ããã¦ã¼ã¶ãèªèãã¾ãã: -
ããã«éè¦ãªãã¨ã¯ãã¦ã¼ã¶
site.comããåããããã¼ããã¤å¥ã®ãµã¤ãother.comã«ç§»åããã¨ããads.comã«å±ãã¦ããã®ã§ãads.com㯠Cookie ãåãåãã¾ãããã®ããã«ã訪åè ãèªèããå½¼ãããµã¤ãéãç§»åããã®ã追跡ãã¾ãã:
ãµã¼ããã¼ã㣠Cookie ã¯ãã®æ§è³ªä¸ãæãããã©ããã³ã°ãåºåãµã¼ãã¹ã«ä½¿ããã¦ãã¾ãããããã¯ãªãªã¸ãã«ã®ãã¡ã¤ã³ã«ãã¤ã³ãããã¦ããã®ã§ãads.com ã¯ç°ãªããµã¤ãéã§åä¸ã¦ã¼ã¶ã追跡ãããã¨ãã§ãã¾ãã
å½ç¶ã追跡ããããã¨ã好ã¾ãªã人ãããã®ã§ããã©ã¦ã¶ã¯ãã®ãã㪠Cookie ãç¡å¹ã«ãããã¨ãå¯è½ã§ãã
ã¾ããããã¤ãã®ã¢ãã³ãã©ã¦ã¶ã¯ãã®ãã㪠Cookie ç¨ã«ç¹å¥ãªããªã·ã¼ãæ¡ç¨ãã¦ãã¾ãã:
- Safari ã¯ãµã¼ããã¼ã㣠Cookie ãä¸å許å¯ãã¾ããã
- Firefox ã¯ãµã¼ããã¼ã㣠Cookie ããããã¯ãããµã¼ããã¼ãã£ãã¡ã¤ã³ã® âãã©ãã¯ãªã¹ãâ ãä»å±ãã¦ãã¾ãã
ããã<script src="https://google-analytics.com/analytics.js"> ã®ãããªãµã¼ããã¼ãã£ãã¡ã¤ã³ããã¹ã¯ãªãããèªã¿è¾¼ã¿ããã®ã¹ã¯ãªããã Cookie ãã»ããããããã« document.cookie ã使ã£ãå ´åããã®ãã㪠Cookie ã¯ãµã¼ããã¼ã㣠Cookie ã§ã¯ããã¾ããã
ã¹ã¯ãªããã Cookie ãè¨å®ããå ´åããã®ã¹ã¯ãªãããã©ãããæ¥ããã¯é¢ä¿ããã¾ãããããã¯ç¾å¨ã® Web ãã¼ã¸ã®ãã¡ã¤ã³ã«å±ãã¾ãã
ä»é²: GDPR
ãã®ãããã¯ã¯ JavaScript ã¨ã¯ã¾ã£ããé¢ä¿ããã¾ãããåã« Cookie ãè¨å®ããã¨ãã«å¿ã«çãã¦ãããã¨ã§ãã
ã¨ã¼ãããã«ã¯ GDPR ã¨å¼ã°ããæ³å¾ããããããã¯ãã¦ã¼ã¶ã®ãã©ã¤ãã·ã¼ãå°éããããã« Web ãµã¤ãã«å¯¾ãã¦ããã«ã¼ã«ãå¼·å¶ãã¦ãã¾ããããã¦ããã®ãããªè¦åã®1ã¤ã«ã追跡ããã Cookie ã«å¯¾ãã¦ã¯ã¦ã¼ã¶ããæç¤ºçãªè¨±å¯ãè¦æ±ãããã¨ããå 容ãããã¾ãã
注æãã¦ãã ãããããã¯ã追跡/èå¥ Cookie ã«ã¤ãã¦ã®ã¿ã§ãã
ãªã®ã§ãåã«æ å ±ãä¿æããã ãã§ãã¦ã¼ã¶ã®è¿½è·¡ãèå¥ãããªã Cookie ã®è¨å®ã¯èªç±ã«è¡ãäºãã§ãã¾ãã
ããããèªè¨¼ã»ãã·ã§ã³ã追跡id ã¨ãã£ãæ å ±ã Cookie ã«è¨å®ããå ´åã«ã¯ãã¦ã¼ã¶ã¯ããã許å¯ããå¿ è¦ãããã¾ãã
Web ãµã¤ãã¯ä¸è¬çã« GDPR ã«æ²¿ã£ã2ã¤ã®ããªã¢ã³ããæã£ã¦ãã¾ããããªã㯠web ä¸ã§ããã両æ¹ãè¦ããã¨ãããã«éãã¾ããã:
-
ãã web ãµã¤ããèªè¨¼ãããã¦ã¼ã¶ã«å¯¾ãã¦ã®ã¿è¿½è·¡ Cookie ãè¨å®ãããå ´åã
ããããããã«ã¯ãç»é²ãã©ã¼ã ã« âãã©ã¤ãã·ã¼ããªã·ã¼ã«åæããâ ã®ãããªãã§ãã¯ããã¯ã¹ãããããã¦ã¼ã¶ã¯ããããã§ãã¯ããå¿ è¦ãããã¾ãããã以éãweb ãµã¤ãã¯èªè¨¼ Cookie ãèªç±ã«ã»ããã§ãã¾ãã
-
ãã web ãµã¤ããå ¨å¡ã«å¯¾ãã¦è¿½è·¡ Cookie ãè¨å®ãããå ´å
åæ³çã«ããããããã«ã¯ãweb ãµã¤ãã¯æ°ããæ¥ã訪åè ã®ããã®ã¢ã¼ãã« âã¹ãã©ãã·ã¥ã¹ã¯ãªã¼ã³â ã表示ããå½¼ãã« Cookie ã«é¢ãã¦åæãããã¨ãè¦æ±ãã¾ãããã®å¾ãweb ãµã¤ã㯠Cookie ãã»ãããããã¨ãã§ãã訪åè ã«ã³ã³ãã³ããè¦ãã¾ããããã¯æ°è¦ã®è¨ªåè ã«ã¨ã£ã¦ã¯é¢åãªãã¨ã§ããã³ã³ãã³ãã®ä»£ããã« âå¿ ãã¯ãªãã¯â ã¢ã¼ãã«ãè¦ãã人ã¯ãã¾ãããã§ãããGDPR ã¯æç¢ºãªåæãè¦æ±ãã¾ãã
GDPR 㯠Cookie ã ãã§ãªããä»ã®ãã©ã¤ãã·ã¼ã«é¢é£ããåé¡ã«ã¤ãã¦ãåæ§ã§ããããããã¯æã ã®ã¹ã³ã¼ãå¤ã§ãã
ãµããª
document.cookie 㯠Cookie ã¸ã®ã¢ã¯ã»ã¹ãæä¾ãã¾ã
- æ¸ãè¾¼ã¿æä½ã¯ãè¨åããã Cookie ã®ã¿ã夿´ãã¾ãã
- name/value ã¯ã¨ã³ã³ã¼ããå¿ è¦ã§ãã
- 1ã¤ã®Cookie 㯠4KB ã¾ã§ã§ããµã¤ãæ¯ã« Cookie 㯠20+ ã§ã(ãã©ã¦ã¶ã«ãã£ã¦ç°ãªãã¾ã)
Cookie ãªãã·ã§ã³:
path=/, ããã©ã«ãã§ã¯ãç¾å¨ã®ãã¹ã§ãããã¹é ä¸ã§ã®ã¿ Cookie ãè¦ããããã«ãã¾ããdomain=site.com, ããã©ã«ãã§ã¯ Cookie ã¯ç¾å¨ã®ãã¡ã¤ã³ã§ã®ã¿è¦ãã¾ãããã¡ã¤ã³ãæç¤ºçã«è¨å®ããã¦ããå ´åããµããã¡ã¤ã³ä¸ã§ã Cookie ãè¦ãã¾ããexpires/max-age, Cookie ã®æå¹æéãè¨å®ãã¾ãããªãå ´åãCookie ã¯ãã©ã¦ã¶ãéããããã¨ãã«æ¶ãã¾ããsecure, Cookie ã HTTPS ã®ã¿ã«ãã¾ããsamesite, ãã©ã¦ã¶ããµã¤ãã®å¤ããæ¥ããªã¯ã¨ã¹ãã§ Cookie ãéãã®ãç¦æ¢ãã¾ããXSRF æ»æãé²ãã®ã«å½¹ç«ã¡ã¾ãã
å ãã¦:
- ãµã¼ããã¼ã㣠Cookie ã¯ãã©ã¦ã¶ã«ãã£ã¦ã¯ç¦æ¢ããã¦ããå ´åãããã¾ããe.g. Safari ã¯ããã©ã«ãã§ã¯ããã§ãã
- EU 叿°ã«å¯¾ãã¦è¿½è·¡ Cookie ãè¨å®ããéãGDPR ã¯è¨±å¯ãæ±ãããã¨ãè¦æ±ãã¾ãã
ã³ã¡ã³ã
<code>ã¿ã°ã使ã£ã¦ãã ãããè¤æ°è¡ã®å ´åã¯<pre>ãã10è¡ãè¶ ããå ´åã«ã¯ãµã³ãããã¯ã¹ã使ã£ã¦ãã ãã(plnkr, JSBin, codepenâ¦)ã