Возможно ли кэшировать динамический php-файл с работником службы?

Я пытаюсь кэшировать HTML-файл из динамического php-файла при входе в систему (с помощью cookie-файла сеанса), но html-файл извлекается с сервера без учетных данных из cookie-файла сеанса. (Я не указываю имя файла в URL только путь)

let cacheName = 'q2';

let files = [
'/q/',
'/q/sw.js',
'/q/js/main.js',
'/q/js/init.js',
'/q/js/lib.js',
'/q/css/css.css',
'/q/images/b.jpg',
'/q/apps/BOK/js/main.js'
];self.addEventListener('install', (event) => {
event.waitUntil(
caches.open(cacheName)
.then((cache) => {
return cache.addAll(files)
.then(() => {
console.info('All files are cached');
return self.skipWaiting();
})
.catch((error) =>  {
console.error('Failed to cache', error);
});
})
);
});

(Я опустил self.addEventListener («fetch», функция (событие))

Когда я смотрю на текстовый / html файл из ‘/ q /, сервисный работник получил его с сервера без cookie-файла php-сеанса PHPSESSID, и поэтому содержимое неверно.

(В противном случае он отлично работает в автономном режиме)

Есть ли этому решение?

0

Решение

Такое поведение объясняется в Получить API спецификацию.

HTTP-куки (и некоторые другие вещи) называются «полномочия».

Включены ли учетные данные в исходящий HTTP-запрос или нет, определяется значением credentials имущество из Request объект. По умолчанию, credentials установлен в 'omit', что приводит к поведению, которое вы видите. Если вы хотите, чтобы учетные данные, такие как файлы cookie HTTP, были включены, вам нужно использовать Request объекты, чьи credentials свойства установлены в 'include',

Для этого вместо передачи массива строк cache.addAll(), вы должны передать в массиве Request объекты с надлежащим credentials режим явно установлен. Вот как изменится ваш код:

const requestsWithCredentials = [
'/q/',
'/q/sw.js',
'/q/js/main.js',
'/q/js/init.js',
'/q/js/lib.js',
'/q/css/css.css',
'/q/images/b.jpg',
'/q/apps/BOK/js/main.js'
].map(url => new Request(url, {credentials: 'include'}));

// Later...
cache.addAll(requestsWithCredentials);
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]