Файли cookie лише на сеансі з Javascript


84

Мені було цікаво, чи можливо створити файли cookie лише для сеансів за допомогою Javascript. Коли браузер закритий, файли cookie слід видалити.

Я не можу нічого використовувати на сервері, оскільки веб-сайт має лише HTML ... тому не використовується сценарій на стороні сервера.

Я читав щось про це тут: http://blog.lysender.com/2011/08/setting-session-only-cookie-via-javascript/, але я не можу знайти більше інформації про це ... так що я був цікаво, чи надійний цей метод.

Відповіді:


136

Так, це правильно.

Якщо не вставити expiresчастину, це створить сеансовий файл cookie, незалежно від того, створений він у JavaScript або на сервері.

Див. Https://stackoverflow.com/a/532660/1901857


Це не працює для мене і намагався багато в чому ... Можливо, ця відповідь застаріла.
Ден

Файли cookie @Dan Session не працюють у випадку ввімкненої конфігурації: "Продовжуйте там, де ви зупинилися" у браузері. У цьому випадку браузери не будуть знищувати сеансові файли cookie після закриття.
Тарон Сарібекян

@TaronSaribekyan ти маєш рацію, але ти повинен попросити всіх користувачів вашого веб-сайту вимкнути конфігурацію "Продовжувати там, де ти зупинився". Натомість sessionStorage працював відразу у всіх браузерах.
Дан,

50

У 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']);

Сеанс сторінки триває стільки часу, скільки браузер відкритий і переживає перезавантаження та відновлення сторінки. Відкриття сторінки в новій вкладці чи вікні призведе до ініціювання нового сеансу.

Отже, коли ви закриваєте сторінку / вкладку, дані втрачаються.


1
Так, сховище сеансів - найкращий вибір для цього випадку використання.
Жульєн Лафонт

11
насправді зараз я використовую сховище сеансів ... але, мабуть, коли ви відкриваєте нову вкладку в chrome і firefox, ви не можете отримати доступ до матеріалів, які ви зберігаєте в сховищі сеансів ... так ось чому я дивився на файли cookie сеансу: код. google.com/p/chromium/issues/detail?id=165452
Даан Порон

У такому випадку файли cookie повинні бути надійними, хоча я навіть не уявляю, наскільки добре вони підтримуються.
Cerbrus

2
На сесійне (та локальне) сховище впливає Політика того самого походження, тому, якщо ви перемикаєтеся з http на https, ви не матимете доступу до матеріалів, що зберігаються в http (і навпаки)
Jeff Lowery

2
Я думаю, що SessionStorageнадає client-onlyрішення лише без доступу до цих значень на стороні сервера. У багатьох серверних фреймворках, таких як ASP.Net та PHP, ми хотіли б легко отримати доступ до значень на стороні клієнта, які ми могли зберігати без використання прихованих полів тощо, і тоді файли cookie стають кращим рішенням, оскільки файли cookie автоматично надсилаються до на стороні сервера.
Суніл

9

Для створення файлу cookie лише для сеансів із сценарієм Java ви можете використовувати наступне. Це працює для мене.

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

потім отримайте значення cookie наступним чином

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

4
expires = 0 в IE взагалі не встановлює файл cookie: blog.lysender.com/2011/08/…
JDandChips

1
expires = "" працює в IE і дозволяє скинути термін дії файлу cookie на "Сеанс", якщо ви явно встановили його
koolunix

1

Використовуйте наведений нижче код для файлу cookie сеансу налаштування, він буде працювати до закриття браузера. (переконайтесь, що вкладка не закрита)

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');
  }
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.