Как установить срок действия cookie, когда вкладка закрыта - PullRequest
0 голосов
/ 14 мая 2019

Я пытаюсь создать сессионный cookie для моего медиаплеера здесь , чтобы отслеживать использование и другие вещи, код и фрагмент кода ниже не создают его вообще (кстати Я использую один сценарий для создания нескольких файлов cookie с использованием параметров и хочу сохранить его таким, чтобы он не создавал длительные сценарии)

Я уже пробовал много ответов, представленных на сайте, но они не работают, они просто приводят к той же проблеме

//script to create the cookies
function setCookie(cname,cvalue,exdays) {
  var d = new Date();
  d.setTime(d.getTime() + (exdays*24*60*60*1000));
  var expires = "expires=" + d.toGMTString();
  document.cookie = cname + "=" + cvalue + ";" + expires + ";path=/";
}
//for the cookie that makes the name, not part of the question
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 "";
}
// also for the name
function checkCookie() {
  var user=getCookie("username");
  if (user != "") {
    document.getElementById("display").innerHTML = "Welcome back " + user
  } else {
  document.getElementById("display").innerHTML = "Please enter your name in The prompt at the top of your screen!";
     user = prompt("Please enter your name:","");
     if (user != "" && user != null) {
       setCookie("username", user, 30);
     }
  }
}
window.onload = checkCookie()
//for the session
window.onload = createsession()

function createsession(length){
    var sessionnumber = Random rand = new Random();

long drand = (long)(rand.nextDouble()*10000000000L);
    setCookie("session", sessionnumber);
};
window.onbeforeunload = function(){
document.cookie = "username=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;";
};

я хочу, чтобы скрипт создавал cookie-файл, срок действия которого истекает в конце сеанса браузера, и в то же время оставлял неизменными другие сценарии, чтобы позволить мне создавать несколько cookie-файлов без дублирования этих сценариев обработки

1 Ответ

0 голосов
/ 15 мая 2019

Я создал следующую скрипку для тестирования: https://jsfiddle.net/Twisty/toxjLmd8/10/

Я добавил несколько вещей для увеличения информации в консоли. Когда я осматриваю страницу и просматриваю хранилище, я вижу session cookie и username cookie. Если я обновлюсь, мне будет предложено ввести имя еще раз. Так что, похоже, работает как ожидалось.

$(function() {
  function setCookie(cname, cvalue, exdays) {
    var d = new Date();
    if (exdays == undefined) {
      exdays = 1;
    }
    d.setTime(d.getTime() + (exdays * 24 * 60 * 60 * 1000));
    var expires = "expires=" + d.toGMTString();
    console.log("Set Cookie: " + cname + "=" + cvalue, expires);
    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;
  }

  function checkCookie() {
    var user = getCookie("username");
    if (user != "") {
      $("#display").html("Welcome back " + user);
    } else {
      $("#display").html("Welcome, please enter your name.");
      user = prompt("Please enter your name:", "");
      if (user != "" && user != null) {
        setCookie("username", user, 30);
      }
    }
  }

  function newSession() {
    var sessionnumber = Math.random() * 10000000000.0;
    console.log("New Session: " + sessionnumber);
    setCookie("session", sessionnumber, 0.0125);
  }

  function checkSession() {
    if (getCookie("session") == false) {
      newSession();
    }
    console.log("Current Session: " + getCookie("session"));
  }

  window.onbeforeunload = function() {
    console.log("Closing - Expire 'username' Cookie");
    setCookie("username", "", 0);
  };

  window.onload = checkCookie();
  window.onload = checkSession();
});

Устанавливая прошедшую дату или текущую дату и время, браузер должен сразу же прекратить использование куки и удалить его. Установка cookie без срока действия может привести к неожиданным результатам в разных браузерах. Если дата не установлена, она должна истечь в конце сеанса (ожидаемое поведение), но браузер может увидеть, что она уже истекла (все еще хорошо) или никогда не истечет (действительно плохо). Не все браузеры написаны одинаково.

Также, если обратный вызов onbeforeunload не запущен, срок действия файла cookie не истек, но он будет оставаться активным в течение 30 дней в течение checkCookie(). Вы можете установить срок действия файла cookie через 20 минут (0.0125 дней). Вот как сеансы обрабатываются на стороне сервера. Если сокет закрывается и сеанс простаивает в течение 20 минут (по умолчанию время ожидания простоя сеанса), данные сеанса удаляются.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...