是否可以使用服务工作者缓存动态php文件?

时间:2017-12-06 21:56:08

标签: javascript php session cookies service-worker

我正在尝试在登录时使用动态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,因此内容是错误的。

(否则它完美离线)

有解决方法吗?

1 个答案:

答案 0 :(得分:0)

Fetch API Specification中解释了此行为。

HTTP Cookie(以及其他一些内容)称为“credentials”。

凭据是否包含在传出HTTP请求中,取决于Request对象的credentials property的值。默认情况下,credentials设置为'omit',这会导致您看到的行为。如果您需要包含HTTP Cookie等凭据,则需要使用Request属性设置为credentials的{​​{1}}个对象。

为此,不应将字符串数组传递给'include',而应传入一组cache.addAll()个对象,并明确设置正确的Request模式。以下是您的代码将如何更改:

credentials