Cookies sesyjne tylko z Javascriptem


84

Zastanawiałem się, czy możliwe jest tworzenie plików cookie tylko na sesję za pomocą JavaScript. Po zamknięciu przeglądarki pliki cookie powinny zostać usunięte.

Nie mogę niczego używać na serwerze, ponieważ witryna jest tylko w formacie HTML ... więc nie jest używany skrypt po stronie serwera.

Przeczytałem coś na ten temat tutaj: http://blog.lysender.com/2011/08/setting-session-only-cookie-via-javascript/, ale nie mogę znaleźć więcej informacji na ten temat ... więc byłem zastanawiam się, czy ta metoda jest niezawodna.

Odpowiedzi:


136

Tak to jest poprawne.

Niewstawienie expiresczęści spowoduje utworzenie pliku cookie sesji, niezależnie od tego, czy jest utworzony w JavaScript, czy na serwerze.

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


U mnie to nie działa i próbowałem na wiele sposobów ... Może ta odpowiedź jest nieaktualna.
Dan

@Dan Session cookies nie działają w przypadku włączonej konfiguracji: „Kontynuuj, gdzie przerwałeś” w przeglądarce. W takich przypadkach przeglądarki nie niszczą plików cookie sesji po zamknięciu.
Taron Saribekyan

@TaronSaribekyan masz rację, ale musisz poprosić wszystkich użytkowników Twojej witryny o wyłączenie konfiguracji „Kontynuuj od miejsca, w którym skończyłeś”. Zamiast tego sessionStorage działało od razu we wszystkich przeglądarkach.
Dan

50

Prostszym rozwiązaniem byłoby użycie sessionStoragew tym przypadku:

var myVariable = "Hello World";

sessionStorage['myvariable'] = myVariable;

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

Pamiętaj jednak, że sessionStoragezapisuje wszystko jako ciąg znaków, więc podczas pracy z tablicami / obiektami możesz używać JSON do ich przechowywania:

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

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

Sesja strony trwa tak długo, jak długo przeglądarka jest otwarta i trwa po ponownym załadowaniu i przywróceniu strony. Otwarcie strony w nowej karcie lub oknie spowoduje zainicjowanie nowej sesji.

Tak więc po zamknięciu strony / karty dane zostaną utracone.


1
Tak, magazyn sesji to najlepszy wybór w tym przypadku.
Julien Lafont,

11
w rzeczywistości używam pamięci sesji ... ale najwyraźniej po otwarciu nowej karty w Chrome i Firefox nie możesz uzyskać dostępu do rzeczy przechowywanych w pamięci sesji ... dlatego właśnie patrzyłem na pliki cookie sesji: kod. google.com/p/chromium/issues/detail?id=165452
Daan Poron,

W takim przypadku pliki cookie powinny być niezawodne, chociaż nie mam pojęcia, jak dobrze są obsługiwane.
Cerbrus,

2
Sesyjne (i lokalne) przechowywanie podlega zasadom Same-Origin-Policy, więc jeśli przełączysz się z http na https, nie będziesz mieć dostępu do rzeczy przechowywanych w http (i odwrotnie)
Jeff Lowery,

2
Myślę, że SessionStoragezapewnia client-onlyrozwiązanie tylko bez dostępu do tych wartości po stronie serwera. W wielu frameworkach po stronie serwera, takich jak ASP.Net i PHP, chcielibyśmy mieć łatwy dostęp do wartości po stronie klienta, które mogliśmy przechowywać bez używania ukrytych pól itp., A wtedy pliki cookie stają się lepszym rozwiązaniem, ponieważ pliki cookie są automatycznie wysyłane do po stronie serwera.
Sunil

9

Aby utworzyć plik cookie tylko dla sesji za pomocą skryptu java, możesz użyć następującego. To działa dla mnie.

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

następnie pobierz wartość pliku cookie w następujący sposób

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

W porządku, aby wspierać IE, możemy zostawić „wygasa” całkowicie i możemy z tego korzystać

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

4
expires = 0 w IE w ogóle nie ustawia ciasteczka: blog.lysender.com/2011/08/…
JDandChips

1
expires = "" działa w IE i umożliwia zresetowanie wygaśnięcia pliku cookie do Sesji, jeśli wyraźnie go
ustawiłeś

1

Użyj poniższego kodu dla pliku cookie sesji konfiguracji, będzie działać do zamknięcia przeglądarki. (nie zamykaj karty)

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');
  }
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.