web-dev-qa-db-fra.com

Seuls les cookies de session 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 en HTML uniquement ... 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 plus d'informations sur this ... alors je me demandais si cette méthode était fiable.

65
Daan Poron

Oui c'est correct.

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

Voir https://stackoverflow.com/a/532660/1901857

116
Rhumborl

Une solution plus simple consisterait à 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 forme de 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 après un rechargement et une restauration de page. Si vous ouvrez une page dans un nouvel onglet ou une nouvelle fenêtre, une nouvelle session sera lancée.

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

40
Cerbrus

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

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

puis obtenir la valeur de 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 "expire" complètement et pouvons utiliser cette

document.cookie = "mtracker=somevalue; path=/";
6
Gaurav Agarwal