#javascript #node.js #reactjs #http #cookies
#javascript #node.js #reactjs #http #файлы cookie
Вопрос:
Я использую файлы cookie для управления аутентификацией в приложении React. Есть два случая, когда файлы cookie браузера удаляются на стороне клиента. Что может быть причиной этого?
РЕДАКТИРОВАТЬ: Похоже, это происходит только с Firefox Developer Edition. Это работает, как и ожидалось, в Firefox, Chrome и Safari. Не уверен, что они делают по-другому…
Извлечение ресурсов с сервера Express
(1) Пользователь нажимает на ссылку, которая запускает выборку для загрузки файла с сервера express. Я загружаю файл. Когда я снова нажимаю на ту же ссылку, файл cookie исчезает из браузера и загрузка во второй раз завершается неудачно.
клиент, извлекающий ресурс
async function promptDownload(fetchResponse, filename) {
const blob = await fetchResponse.blob();
const fileURL = URL.createObjectURL(blob);
const a = document.createElement('a');
a.href = fileURL;
a.target = '_blank';
a.download = filename;
a.click();
URL.revokeObjectURL(fileURL);
}
export const fetchAsset = async (url, filename, jwt) => {
try {
var fetchResponse = await fetch(url, {
headers: {
'Authorization': `Bearer ${jwt}`,
},
credentials: 'include',
});
} catch (error) {
console.error(error);
return;
}
promptDownload(fetchResponse, filename);
};
узлы, обслуживающие ресурс:
app.get("/assets/:filename", (req, res) => {
res.download(file);
});
Навигация по веб-сайту (проблема с истечением срока действия?)
(2) Браузер случайным образом удаляет cookie-файлы при навигации пользователя по веб-сайту. Я установил срок действия cookie на 15 минут — я тестировал несколько раз, но время от времени он удаляет cookie до истечения этих 15 минут. Файл cookie удаляется только тогда, когда пользователь меняет маршруты (я выполняю асинхронный вызов для получения нового файла cookie при каждом изменении маршрута).
Каковы некоторые распространенные случаи, которые могут привести к удалению файлов cookie, кроме истечения срока действия и закрытия браузера?
Комментарии:
1. Верно ли время на сервере?
2. @Evert Хороший момент, я это не проверял. Но я использовал «max-age» (вместо «expires»), чтобы установить срок действия файлов cookie, так будет ли это иметь значение в данном случае?
3. Браузеры все еще могут рассматривать
Date
поле как базовое время для вычисления времени истечения срока действия.4. Проверил временную метку, выглядит хорошо :/