我正在尝试在登录时使用动态php文件缓存html(使用session-cookie)但是从服务器获取html文件而没有来自session-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”,function(event))
当我查看来自'/ q /的text / html文件时,服务工作者已从服务器获取它而没有php会话cookie PHPSESSID,因此内容是错误的。
(否则它完美离线)
有解决方法吗?
答案 0 :(得分:0)
Fetch API Specification中解释了此行为。
HTTP Cookie(以及其他一些内容)称为“credentials”。
凭据是否包含在传出HTTP请求中,取决于Request
对象的credentials
property的值。默认情况下,credentials
设置为'omit'
,这会导致您看到的行为。如果您需要包含HTTP Cookie等凭据,则需要使用Request
属性设置为credentials
的{{1}}个对象。
为此,不应将字符串数组传递给'include'
,而应传入一组cache.addAll()
个对象,并明确设置正确的Request
模式。以下是您的代码将如何更改:
credentials