• cookie
  • nextjs
  • serverless

Kuinka korjata evästeen ylittynyt koko virhe jakamalla evästeet

Ratkaisu evästeen koon ylittyneelle virheelle: jaa eväste useampaan pienempään evästeeseen ja kokoa ne palvelinpuolella. Tämä ratkaisu toimii erityisen hyvin serverittömillä alustoilla ilman lisäinfrastruktuuria.

Sijie
Sijie
Developer

Lyhyesti: Kun evästeen koko ylittää 4KB:n selaimen rajan, jaa se useampaan pienempään evästeeseen ja kokoa ne palvelinpuolella. Tämä ratkaisu toimii erityisen hyvin serverittömillä alustoilla ilman lisäinfrastruktuuria.

Evästeiden käyttö Logto SDK:issa

Useimmissa perinteisten verkkosovellusten Logto SDK:ssa tallennamme istuntotiedot HTTP-only evästeisiin turvallisuuden vuoksi. Tässä on lähestymistapamme:

Kun SDK suorittaa toimintoja, jotka vaativat istuntotietoja, se:

  • Salakirjoittaa tiedot symmetrisellä salauksella
  • Tallentaa salatun merkkijonon HTTP-only evästeeseen
  • Asettaa turvaliput varmistaakseen, että tiedonsiirto tapahtuu vain HTTPS:llä

Tämä lähestymistapa ei vaadi ulkoista tallennustilaa ja voidaan ottaa käyttöön suoraan suosituilla serverittömillä alustoilla, kuten Vercel, ilman lisäinfrastruktuurimuutoksia.

Ongelma: Evästeen koko ylittynyt virhe

Kuitenkin, kun otettiin käyttöön tuki moniorganisaatioille, kohtasimme rajoituksen. Evästeemme koko kasvoi yli 4KB:n selaimen rajan, koska meidän täytyi tallentaa:

  • Sisäänkirjautumis- ja muut istuntotiedot
  • ID-tunnukset käyttäjäntodennusta varten
  • Uusimistunnukset
  • Pääsytunnukset eri resurssi-indikaattoreilla
  • Organisaatiotunnukset, jotka ovat JWT-muodossa hyötykuorman kanssa, yksi per organisaatio, mikä voi olla melko suuri, jos useita organisaatioita on aktiivisena samanaikaisesti

Tämä johti virheeseen:

Selaimet asettavat tiukat evästeiden kokorajoitukset, ja useimmat rajoittavat yksittäiset evästeet 4KB:iin ja koko evästekoko 8KB:iin per verkkotunnus.

Entä ulkoisen tallennustilan käyttö?

Ulkoisen tallennustilan, kuten Redis tai tietokannan, käyttö vaatisi lisäinfrastruktuurin asennusta, mikä lisää sekä kustannuksia että monimutkaisuutta SDK-käyttäjille. Tämä on vastoin tavoitettamme tarjota kehittäjäystävällinen ratkaisu.

Vaikka muistissa oleva tallennustila voisi olla vaihtoehto, se ei toimi hyvin serverittömissä ympäristöissä, joissa instanssit ovat lyhytkestoisia ja muisti ei ole jaettu pyyntöjen välillä.

Ratkaisu: Evästeiden jakaminen

Yksinkertainen ratkaisu on jakaa suuret evästeet pienempiin paloihin. Tämä artikkeli esittelee lähestymistavan käyttämällä Next.js:ää esimerkkinä:

1. Jaa istuntotiedot

2. Tallenna palat

3. Kokoa pyyntöä varten

Parhaat käytännöt toteutukseen

1. Palakoon hallinta

2. Puhdas istuntohallinta

Valvo koko evästekokoa:

Johtopäätös

Evästeiden jakaminen tarjoaa elegantin ratkaisun, joka on sekä helppo toteuttaa että vähiten häiritsevä olemassa olevalle sovellusarkkitehtuurille. Jakamalla yksinkertaisesti suuret evästeet pienempiin paloihin, kehittäjät voivat voittaa selaimen kokorajoitukset muuttamatta ydintoimintojaan tai lisäämättä ulkoisia riippuvuuksia.