Sobes.tech
Junior

Браузерде кукилерди кантип орнотуу керек?

sobes.tech AI

AIден жооп

Браузерде кукилерди орнотуу үчүн бир нече жол бар.

  1. HTTP башталыш Set-Cookie аркылуу серверден. Бул кукилерди орнотуунун негизги жолу, ал сервер тарабынан ишке ашырылат. Сервер браузерге Set-Cookie башталышын жиберет, ал браузерге белгилүү бир ачкыч-баа жупту сактоого көрсөтмө берет.

    Серверден HTTP жооптун мисалы:

    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 башталышынын параметрлери:

    • name=value: кукинин аты жана мааниси. Мажбурий.
    • Expires=<датасы>: кукинин мөөнөтү жана убактысы. Эгер көрсөтүлбөсө, анда сессиялык куки болуп, браузер жабылганда өчүрүлөт. Датанын форматы RFC 1123.
    • Max-Age=<секунд>: кукинин максималдуу жашоо мөөнөтү секунддар менен. Expires үстөмдүк кылат.
    • Domain=<домен>: куки жеткиликтүү болгон домен. Туура келгенде, учурдагы домен (бирок поддомендер эмес).
    • Path=<жол>: сервердеги куки жеткиликтүү болгон жол. Туура келгенде, түпкү жол /.
    • Secure: белгиси, кукинин тек HTTPS аркылуу жөнөтүлүшүн көрсөтөт.
    • HttpOnly: белгиси, кукинин JavaScript аркылуу document.cookie аркылуу жеткиликтүү болбоосун көрсөтөт. XSS чабуулдарынан коргоо.
    • SameSite=<режим>: кукинин кросс-сайт суроолорунда жөнөтүлүшүн башкаруу. Мүмкүн болгон маанилер: Strict, Lax (өзүнчө), None.
  2. Клиент тараптагы JavaScript аркылуу. document.cookie объектисин колдонуп, кукилерди окуп, жазып жана өчүрүүгө болот.

    Куки жазуу:

    // Жөнөкөй куки орнотуу
    document.cookie = "username=johndoe";
    
    // `expires`, `path`, `secure` жана `SameSite=Lax` менен куки орнотуу
    const expiryDate = new Date();
    expiryDate.setTime(expiryDate.getTime() + (30 * 24 * 60 * 60 * 1000)); // 30 күн
    document.cookie = `token=abcdef123456; expires=${expiryDate.toUTCString()}; path=/; secure; SameSite=Lax`;
    

    Куки окуу:

    // `document.cookie` бардык жеткиликтүү кукилердин сапты кайтарат "ключ1-маани1; ключ2-маани2; ..." форматында
    console.log(document.cookie);
    

    Куки өчүрүү: Өчүрүү үчүн, анын мөөнөтүн өткөнгө коюу керек.

    document.cookie = "username=; expires=Thu, 01 Jan 1970 00:00:00 GMT; path=/"; // expires өткөндө коюу
    

    Өчүрүүдө, path жана domain параметрлерин ошол эле кылуу маанилүү (эгер белгиленсе), ошондой эле SameSite да туура болушу керек.

  3. Чет өлкөлүк JavaScript китепканалары аркылуу. Кийинки китепканалар кукилер менен иштөөнү жеңилдетет (мисалы, js-cookie). Алар орнотуу, алуу жана өчүрүү үчүн көбүрөөк ыңгайлуу API сунуштайт.

    js-cookie менен мисал:

    // Китепкананы кошуу
    // <script src="https://cdn.jsdelivr.net/npm/js-cookie@3.0.1/dist/js.cookie.min.js"></script>
    
    // Куки орнотуу
    Cookies.set('username', 'johndoe');
    
    // Куки орнотуу опциялар менен
    Cookies.set('token', 'abcdef123456', { expires: 30, path: '/', secure: true, sameSite: 'Lax' }); // expires күндөрдө
    
    // Куки алуу
    const username = Cookies.get('username'); // 'johndoe' же `undefined`
    const allCookies = Cookies.get(); // бардык кукилерди объект түрүндө кайтарат
    
    // Куки өчүрүү
    Cookies.remove('username');
    Cookies.remove('token', { path: '/' }); // жолду көрсөтүү, эгер ал орнотулса