Sitzung nur Cookies mit Javascript

82

Ich habe mich gefragt, ob es möglich ist, nur Sitzungscookies mit Javascript zu erstellen. Wenn der Browser geschlossen ist, sollten die Cookies entfernt werden.

Ich kann nichts auf dem Server verwenden, da die Website nur aus HTML besteht. Daher wird kein serverseitiges Skript verwendet.

Ich habe hier etwas darüber gelesen: http://blog.lysender.com/2011/08/setting-session-only-cookie-via-javascript/, aber ich kann keine weiteren Informationen dazu finden ... also war ich es Ich frage mich, ob diese Methode zuverlässig ist.

Daan Poron
quelle

Antworten:

134

Ja, das ist richtig.

Wenn Sie kein expiresTeil einfügen, wird ein Sitzungscookie erstellt, unabhängig davon, ob es in JavaScript oder auf dem Server erstellt wurde.

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

Rhumborl
quelle
Es funktioniert nicht für mich und hat es auf viele Arten versucht ... Vielleicht ist diese Antwort veraltet.
Dan
@ Dan Session-Cookies funktionieren bei aktivierter Konfiguration nicht: "Weiter dort, wo Sie aufgehört haben" im Browser. In diesem Fall zerstören Browser nach dem Schließen keine Sitzungscookies.
Taron Saribekyan
@TaronSaribekyan Sie haben Recht, aber Sie müssen alle Benutzer Ihrer Website bitten, die Konfiguration "Weiter dort, wo Sie aufgehört haben" zu deaktivieren. Stattdessen funktionierte sessionStorage sofort in allen Browsern.
Dan
50

Eine einfachere Lösung wäre sessionStoragein diesem Fall:

var myVariable = "Hello World";

sessionStorage['myvariable'] = myVariable;

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

Beachten Sie jedoch, dass sessionStoragealles als Zeichenfolge gespeichert wird. Wenn Sie also mit Arrays / Objekten arbeiten, können Sie diese mithilfe von JSON speichern:

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

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

Eine Seitensitzung dauert so lange, wie der Browser geöffnet ist und über das Neuladen und Wiederherstellen von Seiten hinaus Bestand hat. Wenn Sie eine Seite in einem neuen Tab oder Fenster öffnen, wird eine neue Sitzung initiiert.

Wenn Sie also die Seite / Registerkarte schließen, gehen die Daten verloren.

Cerbrus
quelle
Ja, Sitzungsspeicher ist die beste Wahl für diesen Anwendungsfall.
Julien Lafont
11
Eigentlich verwende ich jetzt den Sitzungsspeicher ... aber anscheinend können Sie beim Öffnen eines neuen Tabs in Chrome und Firefox nicht auf die Inhalte zugreifen, die Sie im Sitzungsspeicher gespeichert haben. Deshalb habe ich mir Sitzungscookies angesehen: Code. google.com/p/chromium/issues/detail?id=165452
Daan Poron
In diesem Fall sollten die Cookies zuverlässig sein, obwohl ich keine Ahnung habe, wie gut sie unterstützt werden.
Cerbrus
2
Der Sitzungsspeicher (und der lokale Speicher) sind von der Same-Origin-Richtlinie betroffen. Wenn Sie also von http zu https wechseln, haben Sie keinen Zugriff auf die in http (und umgekehrt) gespeicherten Daten
Jeff Lowery
2
Ich denke SessionStorage, bietet nur eine client-onlyLösung ohne Zugriff auf diese Werte auf der Serverseite. In vielen serverseitigen Frameworks wie ASP.Net und PHP möchten wir einfach auf die clientseitigen Werte zugreifen können, die wir möglicherweise gespeichert haben, ohne versteckte Felder usw. zu verwenden. Cookies werden dann zu einer besseren Lösung, da Cookies automatisch an das gesendet werden serverseitig.
Sunil
9

Zum Erstellen von Cookies nur für Sitzungen mit Java-Skript können Sie Folgendes verwenden. Das funktioniert bei mir.

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

Dann erhalten Sie den folgenden Cookie-Wert

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

Okay, um IE zu unterstützen, können wir "expires" vollständig verlassen und dies verwenden

document.cookie = "mtracker=somevalue; path=/";
Gaurav Agarwal
quelle
4
expires = 0 im IE setzt überhaupt kein Cookie: blog.lysender.com/2011/08/…
JDandChips
1
expires = "" funktioniert im IE und ermöglicht es Ihnen, den Ablauf eines Cookies auf Session zurückzusetzen, wenn Sie es explizit festgelegt haben
koolunix
1

Verwenden Sie den folgenden Code für ein Setup-Sitzungscookie. Es funktioniert, bis der Browser geschlossen wird. (Achten Sie darauf, die Registerkarte nicht zu schließen.)

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