104 votes

Cookies de session seulement avec Javascript

Je me demandais s'il était possible de créer des cookies de session uniquement avec Javascript. Lorsque le navigateur est fermé, les cookies doivent être supprimés.

Je ne peux rien utiliser sur le serveur car le site web est uniquement en HTML ... donc aucun script côté serveur n'est utilisé.

J'ai lu quelque chose à ce sujet ici : http://blog.lysender.com/2011/08/setting-session-only-cookie-via-javascript/ mais je ne trouve pas d'autres informations à ce sujet... je me demandais donc si cette méthode était fiable.

164voto

Rhumborl Points 8880

Oui, c'est exact.

Ne pas mettre un expires dans créera un cookie de session, qu'il soit créé en JavaScript ou sur le serveur.

Véase https://stackoverflow.com/a/532660/1901857

Pour le cas d'utilisation de la question (pas de code côté serveur), sessionStorage est une solution plus simple. Mais sessionStorage est réservé au client, et ne fonctionnera donc pas si vous devez accéder à la valeur stockée sur le serveur (par exemple, les connexions des utilisateurs, etc.).

54voto

Cerbrus Points 20704

Une solution plus simple serait d'utiliser sessionStorage dans ce cas :

var myVariable = "Hello World";

sessionStorage['myvariable'] = myVariable;

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

Cependant, gardez à l'esprit que sessionStorage enregistre tout sous la forme d'une chaîne. Ainsi, lorsque vous travaillez avec des tableaux/objets, vous pouvez utiliser JSON pour les stocker :

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

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

Une session de page dure aussi longtemps que le navigateur est ouvert et survit aux rechargements et aux restaurations de page. L'ouverture d'une page dans un nouvel onglet ou une nouvelle fenêtre entraîne le lancement d'une nouvelle session.

Ainsi, lorsque vous fermez la page/onglet, les données sont perdues.

10voto

Gaurav Agarwal Points 817

Pour créer un cookie de session uniquement avec java script, vous pouvez utiliser ce qui suit. Cela fonctionne pour moi.

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

puis obtenir la valeur du cookie comme suit

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

Ok, pour supporter IE, nous pouvons laisser "expires" complètement et utiliser ceci

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

-1voto

Tanay Soft Points 7

Utilisez le code ci-dessous pour un cookie de session de configuration, il fonctionnera jusqu'à la fermeture du navigateur. (assurez-vous de ne pas fermer l'onglet)

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X