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

#javascript #reactjs #cookies #next.js

Вопрос:

Hy, я хочу удалить все файлы cookie и локальное хранилище при закрытии браузера, но хочу сохранить файлы cookie и локальное хранилище во время навигации между страницами в nextjs. Я использую событие window.onbeforeunload, но это событие также запускается при навигации между страницами. Как решить эту проблему.

Комментарии:

1. Вы заглядывали в хранилище сеансов? Это хранилище, которое живет в течение срока действия вкладки/окна.

2. Таким образом, вы не используете сеансовые файлы cookie и хранилище сеансов? Не нужно изобретать велосипед заново.

3. Да, я использую хранилище сеансов, но мне также нужно удалить локальное хранилище и файлы cookie только при закрытии браузера. Как я могу это сделать?

4. Нет никакого способа узнать это………. То, что вы хотите сделать, невозможно. Вот почему вы должны использовать созданные вещи, которые справляются с этим.

Ответ №1:

Как уже упоминали другие в комментариях, вам, вероятно, следует использовать sessionStorage . Дополнительные сведения см. в разделе Хранилище сеансов окон. Самое классное в этом то, что он удаляет данные после окончания сеанса. Но вы также можете удалить данные сеанса внутри сеанса, если хотите.

Правка: Вы можете самостоятельно обрабатывать удаление файлов cookie и данных локального хранилища (когда браузер закрыт). Сделайте это после того, как вы сохранили все, что вам нужно sessionStorage . Затем, когда вы будете перемещаться, у вас все равно будут эти данные, sessionStorage независимо от того, есть ли они у файлов cookie или ls.

Комментарии:

1. Да, я использую хранилище сеансов, но мне также нужно удалить локальное хранилище и файлы cookie только при закрытии браузера. Как я могу это сделать?

2. Может быть, я не совсем понимаю, что вы ищете. sessionStorage должны сохраняться ваши данные во время навигации по странице, и когда вы закрываете браузер, все данные должны быть удалены ( sessionStorage эти данные будут удалены автоматически, а остальные вы можете удалить самостоятельно).

Ответ №2:

Это решено. Метод, который я использую, заключается в том, что я проверяю, активен ли sessionStorage, затем не вызывайте функцию handleAllSessions, чтобы удалить файлы cookie, иначе вызовите ее.

     if (
    typeof window !== 'undefined' amp;amp;
    !sessionStorage.getItem('sessionActive')
  ) {
    handleAllSessions();
  }
  function handleAllSessions() {
    if (!sessionStorage.getItem('sessionActive')) {
      document.cookie = 'suauth=; expires=2000-10-16T19:22:35.000Z;';
      localStorage.removeItem('isAuthenticated');
    }
  }