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

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

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

나는 이것에 대해 http://blog.lysender.com/2011/08/setting-session-only-cookie-via-javascript/를 읽었

지만 이것에 대한 더 많은 정보를 찾을 수 없습니다 … 그래서 나는 이 방법이 신뢰할 수 있는지 궁금합니다.



답변

네, 맞습니다.

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

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


답변

더 간단한 해결책은를 사용하는 것 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']);

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

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


답변

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=/";


답변

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

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');
  }


답변