#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');
}
}