Sobes.tech
Junior

Kaip nustatyti slapukus naršyklėje?

sobes.tech AI

Atsakymas iš AI

Slapukų nustatymas naršyklėje gali būti keliomis būdais.

  1. Per HTTP antraštę Set-Cookie serveryje. Tai pagrindinis būdas nustatyti slapuką, kuris vyksta serveryje. Serveris siunčia naršyklei antraštę Set-Cookie, kuri instructruoja naršyklę išsaugoti tam tikrą raktą-vertės porą.

    Pavyzdys serverio HTTP atsako:

    HTTP/1.1 200 OK
    Content-Type: text/html
    Set-Cookie: username=johndoe; Expires=Thu, 21 Dec 2023 12:00:00 GMT; Path=/; Secure; HttpOnly
    Set-Cookie: settings=theme=dark&lang=en; Path=/
    

    Set-Cookie antraštės parametrai:

    • name=value: slapuko pavadinimas ir reikšmė. Būtinas parametras.
    • Expires=<data>: data ir laikas, kada slapukas pasibaigia. Jei nenurodyta, slapukas yra sesijos ir išnyksta uždarius naršyklę. Datos formatas - RFC 1123.
    • Max-Age=<sekundės>: slapuko galiojimo laikas sekundėmis. Pirmenybė teikiama Expires.
    • Domain=<domenas>: domenas, kuriam skirtas slapukas. Paprastai - dabartinis domenas (bet ne subdomenai).
    • Path=<kelias>: kelias serveryje, kuriam skirtas slapukas. Paprastai - šakninis kelias /.
    • Secure: žymeklis, nurodantis, kad slapukas turi būti siunčiamas tik per HTTPS.
    • HttpOnly: žymeklis, nurodantis, kad slapukas nėra prieinamas JavaScript document.cookie per. Apsaugo nuo XSS atakų.
    • SameSite=<režimas>: valdo slapuko siuntimą kryžminėse užklausose. Galimos reikšmės: Strict, Lax (numatyta), None.
  2. Naudojant JavaScript kliento pusėje. document.cookie objektu galima skaityti, rašyti ir ištrinti slapukus.

    Rašyti slapuką:

    // Paprasto slapuko nustatymas
    document.cookie = "username=johndoe";
    
    // Slapuko nustatymas su expires, path, secure ir SameSite=Lax
    const expiryDate = new Date();
    expiryDate.setTime(expiryDate.getTime() + (30 * 24 * 60 * 60 * 1000)); // 30 dienų
    document.cookie = `token=abcdef123456; expires=${expiryDate.toUTCString()}; path=/; secure; SameSite=Lax`;
    

    Skaityti slapuką:

    // document.cookie grąžina visų prieinamų slapukų eilutę "key1=value1; key2=value2; ..."
    console.log(document.cookie);
    

    Ištrinti slapuką: Norint ištrinti slapuką, reikia jį nustatyti su pasibaigimo data praeityje.

    document.cookie = "username=; expires=Thu, 01 Jan 1970 00:00:00 GMT; path=/"; // Nustatyti expires į praeitį
    

    Svarbu, kad ištrynimo metu nurodyti tuos pačius path ir domain parametrus (jei buvo nustatyti), kaip ir kuriant. Taip pat SameSite turi būti suderinamas.

  3. Naudojant trečiųjų šalių JavaScript bibliotekas. Yra bibliotekų, kurios palengvina slapukų darbą (pvz., js-cookie). Jos siūlo patogesnį API slapukų nustatymui, gavimui ir ištrynimui.

    Pavyzdys su js-cookie:

    // Bibliotekos įtraukimas
    // <script src="https://cdn.jsdelivr.net/npm/js-cookie@3.0.1/dist/js.cookie.min.js"></script>
    
    // Slapuko nustatymas
    Cookies.set('username', 'johndoe');
    
    // Slapuko nustatymas su opcijomis
    Cookies.set('token', 'abcdef123456', { expires: 30, path: '/', secure: true, sameSite: 'Lax' }); // expires dienomis
    
    // Slapuko gavimas
    const username = Cookies.get('username'); // Grąžina 'johndoe' arba undefined
    const allCookies = Cookies.get(); // Grąžina objektą su visais slapukais
    
    // Slapuko ištrynimas
    Cookies.remove('username');
    Cookies.remove('token', { path: '/' }); // Nurodyti path, jei buvo nustatyta