자바 스크립트를 사용한 세션 전용 쿠키


82

Javascript로 세션 전용 쿠키를 만들 수 있는지 궁금합니다. 브라우저를 닫으면 쿠키를 제거해야합니다.

웹 사이트는 HTML 전용이므로 서버에서 아무것도 사용할 수 없으므로 서버 측 스크립트가 사용되지 않습니다.

나는 이것에 대해 http://blog.lysender.com/2011/08/setting-session-only-cookie-via-javascript/를 읽었 지만 이것에 대한 더 많은 정보를 찾을 수 없습니다 ... 그래서 나는 이 방법이 신뢰할 수 있는지 궁금합니다.

답변:


134

네, 맞습니다.

expires파트를 넣지 않으면 JavaScript로 생성 되든 서버에 생성 되든 관계없이 세션 쿠키가 생성됩니다.

참조 https://stackoverflow.com/a/532660/1901857를


그것은 나를 위해 작동하지 않고 여러 가지 방법으로 시도했습니다 ... 아마도이 답변은 구식입니다.
Dan

@Dan 세션 쿠키는 활성화 된 구성의 경우 작동하지 않습니다 : 브라우저에서 "중단 한 부분에서 계속". 이 경우 브라우저는 종료 후 세션 쿠키를 파괴하지 않습니다.
Taron Saribekyan

@TaronSaribekyan 당신이 맞았지만 당신은 당신의 웹 사이트의 모든 사용자에게 "중단 한 부분에서 계속하기"설정을 비활성화하도록 요청해야합니다. 대신 sessionStorage는 모든 브라우저에서 즉시 작동했습니다.
Dan

50

더 간단한 해결책은를 사용하는 것 sessionStorage입니다.이 경우 :

var myVariable = "Hello World";

sessionStorage['myvariable'] = myVariable;

var readValue = sessionStorage['myvariable'];
console.log(readValue);

그러나 sessionStorage모든 것을 문자열로 저장하므로 배열 / 객체로 작업 할 때 JSON을 사용하여 저장할 수 있습니다.

var myVariable = {a:[1,2,3,4], b:"some text"};

sessionStorage['myvariable'] = JSON.stringify(myVariable);
var readValue = JSON.parse(sessionStorage['myvariable']);

페이지 세션은 브라우저가 열려 있고 페이지를 다시로드하고 복원해도 지속되는 동안 지속됩니다. 새 탭이나 창에서 페이지를 열면 새 세션이 시작됩니다.

따라서 페이지 / 탭을 닫으면 데이터가 손실됩니다.


예, 세션 스토리지는이 사용 사례에 가장 적합한 선택입니다.
Julien Lafont 2013 년

11
실제로 지금은 세션 저장소를 사용하고 있지만 크롬과 파이어 폭스에서 새 탭을 열면 세션 저장소에 저장 한 항목에 액세스 할 수없는 것 같습니다. 그래서 세션 쿠키 : 코드를
Daan Poron 2013 년

이 경우 쿠키가 얼마나 잘 지원되는지는 모르겠지만 신뢰할 수 있어야합니다.
Cerbrus

2
세션 (및 로컬) 저장, 당신은 HTTP에 저장되어있는 물건에 대한 액세스 권한이없는 사용자가 http를 https로 전환 그렇다면, 동성 원점 정책에 의해 영향을 (비자 반대)하는
제프 로워

2
나는 서버 측에서 이러한 값에 액세스하지 않고 솔루션을 SessionStorage제공 한다고 생각 합니다 client-only. ASP.Net 및 PHP와 같은 많은 서버 측 프레임 워크에서 숨겨진 필드 등을 사용하지 않고 저장했을 수있는 클라이언트 측 값에 쉽게 액세스하고 싶습니다. 그러면 쿠키가 자동으로 서버 측.
Sunil

9

Java 스크립트로 세션 전용 쿠키를 생성하려면 다음을 사용할 수 있습니다. 이것은 나를 위해 작동합니다.

document.cookie = "cookiename=value; expires=0; path=/";

그런 다음 다음과 같이 쿠키 값을 얻습니다.

 //get cookie 
var cookiename = getCookie("cookiename");
if (cookiename == "value") {
    //write your script
}

//function getCookie        
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) != -1) return c.substring(name.length, c.length);
    }
    return "";
}

IE를 지원하려면 완전히 "만료"상태로두고 이것을 사용할 수 있습니다.

document.cookie = "mtracker=somevalue; path=/";

4
IE에서 expires = 0은 쿠키를 전혀 설정하지 않습니다 : blog.lysender.com/2011/08/…
JDandChips 2014

1
expires = ""는 IE에서 작동하며 명시 적으로 설정 한 경우 쿠키 만료를 세션으로 재설정 할 수 있습니다
koolunix

1

설정 세션 쿠키에 아래 코드를 사용하면 브라우저가 닫힐 때까지 작동합니다. (탭을 닫지 마십시오)

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 false;
  }
  
  
  if(getCookie("KoiMilGaya")) {
    //alert('found'); 
    // Cookie found. Display any text like repeat user. // reload, other page visit, close tab and open again.. 
  } else {
    //alert('nothing');
    // Display popup or anthing here. it shows on first visit only.  
    // this will load again when user closer browser and open again. 
    setCookie('KoiMilGaya','1');
  }
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.