cookieStore:异步Cookie API

发布于:2021-01-15 10:43:16

0

1272

0

cookieStore Cookie JavaScript

Web开发资深人士会注意到的JavaScript API世界中的一种模式是,我们一直在创建新的方法来完成曾经实现的较老,更粗暴的API。XMLHttpRequest成为了fetchAPI,一些电池(如Battery)变得异步了,还有许多其他示例。急需更新的另一个API是cookie API……我们终于得到了它:cookieStore。

新的cookie APIcookieStore是异步的,并提供了cookie管理的逻辑方法。您必须记住,以前获取和设置cookie的方法完全围绕着串联和解析[removed]为字符串的方式。不相信我吗 看看这个怪物!

[removed] =   '__Secure-COOKIENAME=cookie-value' +   '; Path=/' +   '; expires=Fri, 12 Aug 2016 23:05:17 GMT' +   '; Secure' +   '; Domain=example.org'; // now we could assume the write succeeded, but since // failure is silent it is difficult to tell, so we // read to see whether the write succeeded var successRegExp =   /(^|; ?)__Secure-COOKIENAME=cookie-value(;|$)/; if (String([removed]).match(successRegExp)) {   console.log('It worked!'); } else {   console.error('It did not work, and we do not know why'); }

让我们集中精力使用这个新的APIcookieStore来提高Cookie的准确性!

如果您真的想看看现在如何向您显示Cookie,请访问您喜欢的网站并输入 [removed]。惊恐的事件!

设定Cookie

cookieStore.set 允许您设置具有名称,值和其他详细信息的cookie:

// All cookieStore methods are async, so you can `await` or `then`/`catch` await cookieStore.set({    name: "dw-test",    value: 1,    domain: 'davidwalsh.name',    // Very far in the future!   expires: Date.now() + Date.now()  }); // Quick, naive set await cookieStore.set('key', 'value');

这比将奇数字符串连接到已经很奇怪的字符串要好得多[removed]!

取得Cookie

cookieStore.get 提供了一种获取特定Cookie值的方法:

const testCookie = await cookieStore.get('dw-test'); {   domain: "davidwalsh.name",   expires: 3206289322149,   name: "dw-test",   path: "/",   sameSite: "strict",   secure: true,   value: "1", }

如果该cookie存在并且尚未过期,则将返回该cookie的值以及更多信息。是的-一种简单的get方法,而不是解析字符串!眼泪在我眼眶上打滚!

删除Cookie

我们可以使用cookieStore.delete删除Cookie:

await cookieStore.delete('dw-test');

就像您期望的那样简单!

Cookie变更事件

如果您想知道何时创建,删除或修改Cookie,可以在上监听change事件cookieStore:

cookieStore.addEventListener('change', event => {   console.log(`${event.changed.length} changed cookies`);   for (const cookie in event.changed)     console.log(`Cookie ${cookie.name} changed to ${cookie.value}`);   console.log(`${event.deleted.length} deleted cookies`);   for (const cookie in event.deleted)     console.log(`Cookie ${cookie.name} deleted`); });

我很高兴老旧[removed]的东西已经被这个很棒但简单的cookieStoreAPI所取代。使用JavaScript API向上和向上!您希望接下来改进哪些旧版API?