cookieStore: Async Cookie API
Publikováno: 20.10.2020
One pattern in the JavaScript API world that web development veterans will notice is that we’ve been creating new methods to accomplish what older, grosser APIs once achieved. XMLHttpRequest became the fetch API, some APIs like Battery became async, and there are dozens of other examples. Another API desperately in need of updating is the […]
The post cookieStore: Async Cookie API appeared first on David Walsh Blog.
One pattern in the JavaScript API world that web development veterans will notice is that we’ve been creating new methods to accomplish what older, grosser APIs once achieved. XMLHttpRequest
became the fetch
API, some APIs like Battery became async, and there are dozens of other examples. Another API desperately in need of updating is the cookie API…and we’ve finally go it: cookieStore
.
The new cookie API, cookieStore
, is asynchronous and provides a logical method for cookie management. You have to remember that the previous method of getting and setting cookies completely revolved around concatenating and parsing document.cookie
as a string. Don’t believe me? Check out this monstrosity!
document.cookie = '__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(document.cookie).match(successRegExp)) { console.log('It worked!'); } else { console.error('It did not work, and we do not know why'); }
Let’s focus on using this new API, cookieStore
, to bring sanity to cookies!
If you really want to see how cookies are presented to you now, go to your favorite website and type document.cookie
. The horror!
Set a Cookie
cookieStore.set
allows you to set a cookie with name, value, and other specifics:
// All cookieStore methods are sync, 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');
This is so much better than concatenating an odd string onto and already odd document.cookie
!
Get a Cookie
cookieStore.get
provides a method for getting the value of a specific cookie:
const testCookie = await cookieStore.get('dw-test'); { domain: "davidwalsh.name", expires: 3206289322149, name: "dw-test", path: "/", sameSite: "strict", secure: true, value: "1", }
If the cookie exists and hasn’t expired, the value and much more about the cookie will be returned. Yes — a simple get
method instead of parsing a string! Tears in my eyes!
Delete a Cookie
We can use cookieStore.delete
to remove a cookie:
await cookieStore.delete('dw-test');
Just as simple as you’d expect!
Cookie Change Event
If you’d like to know when cookies are being created, deleted, or modified, you can listen for the change
event on the 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`); });
I’m so happy that the old document.cookie
is essentially getting replaced with this awesome but simple cookieStore
API. Onward and upward with JavaScript APIs! Which legacy API would you like to see improved next?
The post cookieStore: Async Cookie API appeared first on David Walsh Blog.