Bagaimana Anda mengurai cookie dalam javascript?

Paket modul CommonJs/AMD untuk browser. Memungkinkan untuk membagi basis kode Anda menjadi beberapa bundel, yang dapat dimuat sesuai permintaan. Mendukung pemuat untuk memproses file sebelumnya, mis. e. json, jsx, es7, css, kurang,. dan barang kustom Anda

Cookie adalah bagian kecil dari data yang dikirim dari situs web ke browser web pengguna. Mereka digunakan untuk menyimpan informasi tentang pengguna, seperti preferensi atau status login mereka

Saat pengguna mengunjungi situs web, browser web mereka akan mengirimkan permintaan ke server. Server kemudian akan mengirimkan respons, yang mencakup sekumpulan header. Salah satu tajuk ini adalah tajuk "Cookie", yang berisi daftar semua kuki yang terkait dengan situs web

Untuk mem-parsing header Cookie, pertama-tama kita harus membaginya menjadi pasangan nama-nilai individual. Ini dapat dilakukan dengan menggunakan String. metode split()

Setelah kita memiliki larik pasangan nama-nilai, kita kemudian dapat mengulanginya dan membuat objek. Objek akan memiliki nama cookie sebagai kunci dan nilai cookie sebagai nilainya

Katakanlah kita memiliki tajuk Cookie berikut −

Set-Cookie: username=john; expires=Thu, 18 Dec 2019 12:00:00 GMT; path=/;

Kita dapat membaginya menjadi pasangan nama-nilai individual seperti −

var pairs = header.split(';');
_

Ini akan memberi kita array berikut −

['username=john', 'expires=Thu, 18 Dec 2019 12:00:00 GMT', 'path=/']

Kami kemudian dapat mengulang melalui array ini dan membuat objek −

var cookies = {};
for (var i = 0; i < pairs.length; i++) {
   var nameValue = pairs[i].split('=');
   cookies[nameValue[0].trim()] = nameValue[1];
}

Ini akan memberi kita objek berikut -

{ username: 'john', expires: 'Thu, 18 Dec 2019 12:00:00 GMT', path: '/' }
_

Mendekati

  • LANGKAH 1 - Kita mulai dengan membuat fungsi bernama parseCookieHeader(). Fungsi ini akan mengambil header cookie sebagai parameter

  • LANGKAH 2 - Kami menggunakan String. metode split() untuk membagi header menjadi pasangan nama-nilai individual

  • LANGKAH 3 - Kami membuat objek kosong untuk menyimpan cookie

  • LANGKAH 4 - Kami menggunakan for loop untuk mengulang semua pasangan nama-nilai

  • LANGKAH 5 - Kami menggunakan String. metode split() untuk membagi setiap pasangan nama-nilai menjadi sebuah array

  • LANGKAH 6 - Kami menyimpan elemen pertama dari array (nama cookie) sebagai kunci di objek cookie. Kami menyimpan elemen kedua dari array (nilai cookie) sebagai nilai dalam objek cookie

  • LANGKAH 7 - Kami mengembalikan objek cookie

  • LANGKAH 8 - Kami mendapatkan header cookie dari dokumen

  • LANGKAH 9 - Kami memanggil fungsi parseCookieHeader() dan mengirimkan header cookie. Ini akan mengembalikan objek dari semua cookie

  • LANGKAH 10 - Kami menampilkan cookie di konsol serta di jendela keluaran

Contoh

Program berikut mendemonstrasikan cara mengurai tajuk Cookie HTTP dan mengembalikan objek dari semua pasangan nama-nilai cookie. Ini kode kerja lengkapnya −

Dalam tutorial ini, kita belajar cara mem-parsing header Cookie dan mengembalikan objek dari semua pasangan nama-nilai cookie di JavaScript

Parsing string header HTTP Cookie dan kembalikan objek dari semua pasangan nama-nilai cookie. Argumen str adalah string yang mewakili Cookie nilai header dan

var cookie = require('cookie-parse');

0 adalah objek opsional yang berisi opsi parsing tambahan

var cookies = cookie.parse('foo=bar; equation=E%3Dmc%5E2');

// { foo: 'bar', equation: 'E=mc^2' }

_

Pilihan

var cookie = require('cookie-parse');

1 menerima properti ini di objek opsi

membaca sandi

Menentukan fungsi yang akan digunakan untuk mendekode nilai cookie. Karena nilai cookie memiliki kumpulan karakter terbatas (dan harus berupa string sederhana), fungsi ini dapat digunakan untuk mendekode nilai cookie yang sebelumnya dikodekan menjadi string JavaScript atau objek lain

Fungsi defaultnya adalah

var cookie = require('cookie-parse');

_2 global, yang akan mendekodekan setiap urutan yang disandikan URL ke dalam representasi byte mereka

perhatikan jika kesalahan dilemparkan dari fungsi ini, nilai cookie asli yang tidak didekodekan akan dikembalikan sebagai nilai cookie

Kue kering. membuat serial (nama, nilai, opsi)

Serialkan pasangan nama-nilai cookie ke dalam string header

var cookie = require('cookie-parse');

3. Argumen

var cookie = require('cookie-parse');

_4 adalah nama untuk cookie, argumen

var cookie = require('cookie-parse');

5 adalah nilai untuk menyetel cookie, dan argumen

var cookie = require('cookie-parse');

0 adalah objek opsional yang berisi opsi serialisasi tambahan

var setCookie = cookie.serialize('foo', 'bar');

// foo=bar

Pilihan

var cookie = require('cookie-parse');

7 menerima properti ini di objek opsi

domain

Menentukan nilai untuk. Secara default, tidak ada domain yang disetel, dan sebagian besar klien akan menganggap cookie hanya berlaku untuk domain saat ini

menyandi

Menentukan fungsi yang akan digunakan untuk menyandikan nilai cookie. Karena nilai cookie memiliki kumpulan karakter terbatas (dan harus berupa string sederhana), fungsi ini dapat digunakan untuk menyandikan nilai menjadi string yang cocok untuk nilai cookie.

Fungsi default adalah

var cookies = cookie.parse('foo=bar; equation=E%3Dmc%5E2');

// { foo: 'bar', equation: 'E=mc^2' }

_0 global, yang akan menyandikan string JavaScript ke urutan byte UTF-8 dan kemudian menyandikan URL apa pun yang berada di luar rentang cookie

kedaluwarsa

Menentukan objek

var cookies = cookie.parse('foo=bar; equation=E%3Dmc%5E2');

// { foo: 'bar', equation: 'E=mc^2' }

_1 menjadi nilai untuk. Secara default, tidak ada kedaluwarsa yang ditetapkan, dan sebagian besar klien akan menganggap ini sebagai "cookie tidak tetap" dan akan menghapusnya dengan syarat seperti keluar dari aplikasi browser web

perhatikan pernyataan bahwa jika

var cookies = cookie.parse('foo=bar; equation=E%3Dmc%5E2');

// { foo: 'bar', equation: 'E=mc^2' }

_4 dan

var cookies = cookie.parse('foo=bar; equation=E%3Dmc%5E2');

// { foo: 'bar', equation: 'E=mc^2' }

5 ditetapkan, maka

var cookies = cookie.parse('foo=bar; equation=E%3Dmc%5E2');

// { foo: 'bar', equation: 'E=mc^2' }

6 diutamakan, tetapi mungkin tidak semua klien mematuhi ini, jadi jika keduanya ditetapkan, mereka harus menunjuk ke tanggal dan waktu yang sama

httpOnly

Menentukan nilai

var cookies = cookie.parse('foo=bar; equation=E%3Dmc%5E2');

// { foo: 'bar', equation: 'E=mc^2' }

_7 untuk atribut [

var cookies = cookie.parse('foo=bar; equation=E%3Dmc%5E2');

// { foo: 'bar', equation: 'E=mc^2' }

8

var cookie = require('cookie-parse');

3][rfc-6265-5. 2. 6]. Jika benar, atribut

var cookies = cookie.parse('foo=bar; equation=E%3Dmc%5E2');

// { foo: 'bar', equation: 'E=mc^2' }

_8 disetel, jika tidak, tidak. Secara default, atribut

var cookies = cookie.parse('foo=bar; equation=E%3Dmc%5E2');

// { foo: 'bar', equation: 'E=mc^2' }

_8 tidak disetel

perhatikan hati-hati saat mengatur ini ke

var setCookie = cookie.serialize('foo', 'bar');

// foo=bar

2, karena klien yang patuh tidak akan mengizinkan JavaScript sisi klien untuk melihat cookie di

var setCookie = cookie.serialize('foo', 'bar');

// foo=bar

3

maxAge

Menentukan

var setCookie = cookie.serialize('foo', 'bar');

// foo=bar

_4 (dalam detik) menjadi nilai untuk. Angka yang diberikan akan dikonversi menjadi bilangan bulat dengan pembulatan ke bawah. Secara default, tidak ada usia maksimum yang ditetapkan

perhatikan pernyataan bahwa jika

var cookies = cookie.parse('foo=bar; equation=E%3Dmc%5E2');

// { foo: 'bar', equation: 'E=mc^2' }

_4 dan

var cookies = cookie.parse('foo=bar; equation=E%3Dmc%5E2');

// { foo: 'bar', equation: 'E=mc^2' }

5 ditetapkan, maka

var cookies = cookie.parse('foo=bar; equation=E%3Dmc%5E2');

// { foo: 'bar', equation: 'E=mc^2' }

6 diutamakan, tetapi mungkin tidak semua klien mematuhi ini, jadi jika keduanya ditetapkan, mereka harus menunjuk ke tanggal dan waktu yang sama

jalur

Menentukan nilai untuk. Secara default, jalur dianggap sebagai. Secara default, tidak ada usia maksimum yang ditetapkan, dan sebagian besar klien akan menganggap ini sebagai "cookie tidak tetap" dan akan menghapusnya dengan syarat seperti keluar dari aplikasi browser web

situs yang sama

Menentukan

var cookies = cookie.parse('foo=bar; equation=E%3Dmc%5E2');

// { foo: 'bar', equation: 'E=mc^2' }

7 atau

var cookie = require('cookie');

var escapeHtml = require('escape-html');

var http = require('http');

var url = require('url');

 

function onRequest(req, res) {

  // Parse the query string

  var query = url.parse(req.url, true, true).query;

 

  if (query && query.name) {

    // Set a new cookie with the name

    res.setHeader('Set-Cookie', cookie.serialize('name', String(query.name), {

      httpOnly: true,

      maxAge: 60 * 60 * 24 * 7 // 1 week

    }));

 

    // Redirect back after setting cookie

    res.statusCode = 302;

    res.setHeader('Location', req.headers.referer || '/');

    res.end();

    return;

  }

 

  // Parse the cookies on the request

  var cookies = cookie.parse(req.headers.cookie || '');

 

  // Get the visitor name set in the cookie

  var name = cookies.name;

 

  res.setHeader('Content-Type', 'text/html; charset=UTF-8');

 

  if (name) {

    res.write('<p>Welcome back, <b>' + escapeHtml(name) + '</b>!</p>');

  } else {

    res.write('<p>Hello, new visitor!</p>');

  }

 

  res.write('<form method="GET">');

  res.write('<input placeholder="enter your name" name="name"> <input type="submit" value="Set Name">');

  res.end('</form');

}

 

http.createServer(onRequest).listen(3000);

3 menjadi nilai untuk atribut

var cookie = require('cookie');

var escapeHtml = require('escape-html');

var http = require('http');

var url = require('url');

 

function onRequest(req, res) {

  // Parse the query string

  var query = url.parse(req.url, true, true).query;

 

  if (query && query.name) {

    // Set a new cookie with the name

    res.setHeader('Set-Cookie', cookie.serialize('name', String(query.name), {

      httpOnly: true,

      maxAge: 60 * 60 * 24 * 7 // 1 week

    }));

 

    // Redirect back after setting cookie

    res.statusCode = 302;

    res.setHeader('Location', req.headers.referer || '/');

    res.end();

    return;

  }

 

  // Parse the cookies on the request

  var cookies = cookie.parse(req.headers.cookie || '');

 

  // Get the visitor name set in the cookie

  var name = cookies.name;

 

  res.setHeader('Content-Type', 'text/html; charset=UTF-8');

 

  if (name) {

    res.write('<p>Welcome back, <b>' + escapeHtml(name) + '</b>!</p>');

  } else {

    res.write('<p>Hello, new visitor!</p>');

  }

 

  res.write('<form method="GET">');

  res.write('<input placeholder="enter your name" name="name"> <input type="submit" value="Set Name">');

  res.end('</form');

}

 

http.createServer(onRequest).listen(3000);

4

var cookie = require('cookie-parse');

3

  • var setCookie = cookie.serialize('foo', 'bar');

    // foo=bar

    2 akan menyetel atribut

    var cookie = require('cookie');

    var escapeHtml = require('escape-html');

    var http = require('http');

    var url = require('url');

     

    function onRequest(req, res) {

      // Parse the query string

      var query = url.parse(req.url, true, true).query;

     

      if (query && query.name) {

        // Set a new cookie with the name

        res.setHeader('Set-Cookie', cookie.serialize('name', String(query.name), {

          httpOnly: true,

          maxAge: 60 * 60 * 24 * 7 // 1 week

        }));

     

        // Redirect back after setting cookie

        res.statusCode = 302;

        res.setHeader('Location', req.headers.referer || '/');

        res.end();

        return;

      }

     

      // Parse the cookies on the request

      var cookies = cookie.parse(req.headers.cookie || '');

     

      // Get the visitor name set in the cookie

      var name = cookies.name;

     

      res.setHeader('Content-Type', 'text/html; charset=UTF-8');

     

      if (name) {

        res.write('<p>Welcome back, <b>' + escapeHtml(name) + '</b>!</p>');

      } else {

        res.write('<p>Hello, new visitor!</p>');

      }

     

      res.write('<form method="GET">');

      res.write('<input placeholder="enter your name" name="name"> <input type="submit" value="Set Name">');

      res.end('</form');

    }

     

    http.createServer(onRequest).listen(3000);

    4 ke

    var cookie = require('cookie');

    var escapeHtml = require('escape-html');

    var http = require('http');

    var url = require('url');

     

    function onRequest(req, res) {

      // Parse the query string

      var query = url.parse(req.url, true, true).query;

     

      if (query && query.name) {

        // Set a new cookie with the name

        res.setHeader('Set-Cookie', cookie.serialize('name', String(query.name), {

          httpOnly: true,

          maxAge: 60 * 60 * 24 * 7 // 1 week

        }));

     

        // Redirect back after setting cookie

        res.statusCode = 302;

        res.setHeader('Location', req.headers.referer || '/');

        res.end();

        return;

      }

     

      // Parse the cookies on the request

      var cookies = cookie.parse(req.headers.cookie || '');

     

      // Get the visitor name set in the cookie

      var name = cookies.name;

     

      res.setHeader('Content-Type', 'text/html; charset=UTF-8');

     

      if (name) {

        res.write('<p>Welcome back, <b>' + escapeHtml(name) + '</b>!</p>');

      } else {

        res.write('<p>Hello, new visitor!</p>');

      }

     

      res.write('<form method="GET">');

      res.write('<input placeholder="enter your name" name="name"> <input type="submit" value="Set Name">');

      res.end('</form');

    }

     

    http.createServer(onRequest).listen(3000);

    8 untuk penegakan situs yang sama ketat
  • var cookie = require('cookie');

    var escapeHtml = require('escape-html');

    var http = require('http');

    var url = require('url');

     

    function onRequest(req, res) {

      // Parse the query string

      var query = url.parse(req.url, true, true).query;

     

      if (query && query.name) {

        // Set a new cookie with the name

        res.setHeader('Set-Cookie', cookie.serialize('name', String(query.name), {

          httpOnly: true,

          maxAge: 60 * 60 * 24 * 7 // 1 week

        }));

     

        // Redirect back after setting cookie

        res.statusCode = 302;

        res.setHeader('Location', req.headers.referer || '/');

        res.end();

        return;

      }

     

      // Parse the cookies on the request

      var cookies = cookie.parse(req.headers.cookie || '');

     

      // Get the visitor name set in the cookie

      var name = cookies.name;

     

      res.setHeader('Content-Type', 'text/html; charset=UTF-8');

     

      if (name) {

        res.write('<p>Welcome back, <b>' + escapeHtml(name) + '</b>!</p>');

      } else {

        res.write('<p>Hello, new visitor!</p>');

      }

     

      res.write('<form method="GET">');

      res.write('<input placeholder="enter your name" name="name"> <input type="submit" value="Set Name">');

      res.end('</form');

    }

     

    http.createServer(onRequest).listen(3000);

    _9 tidak akan menyetel atribut ________32______4
  • $ npm test

    1 akan menyetel atribut

    var cookie = require('cookie');

    var escapeHtml = require('escape-html');

    var http = require('http');

    var url = require('url');

     

    function onRequest(req, res) {

      // Parse the query string

      var query = url.parse(req.url, true, true).query;

     

      if (query && query.name) {

        // Set a new cookie with the name

        res.setHeader('Set-Cookie', cookie.serialize('name', String(query.name), {

          httpOnly: true,

          maxAge: 60 * 60 * 24 * 7 // 1 week

        }));

     

        // Redirect back after setting cookie

        res.statusCode = 302;

        res.setHeader('Location', req.headers.referer || '/');

        res.end();

        return;

      }

     

      // Parse the cookies on the request

      var cookies = cookie.parse(req.headers.cookie || '');

     

      // Get the visitor name set in the cookie

      var name = cookies.name;

     

      res.setHeader('Content-Type', 'text/html; charset=UTF-8');

     

      if (name) {

        res.write('<p>Welcome back, <b>' + escapeHtml(name) + '</b>!</p>');

      } else {

        res.write('<p>Hello, new visitor!</p>');

      }

     

      res.write('<form method="GET">');

      res.write('<input placeholder="enter your name" name="name"> <input type="submit" value="Set Name">');

      res.end('</form');

    }

     

    http.createServer(onRequest).listen(3000);

    4 ke

    $ npm test

    3 untuk penegakan situs yang lemah
  • $ npm test

    _4 akan menyetel atribut

    var cookie = require('cookie');

    var escapeHtml = require('escape-html');

    var http = require('http');

    var url = require('url');

     

    function onRequest(req, res) {

      // Parse the query string

      var query = url.parse(req.url, true, true).query;

     

      if (query && query.name) {

        // Set a new cookie with the name

        res.setHeader('Set-Cookie', cookie.serialize('name', String(query.name), {

          httpOnly: true,

          maxAge: 60 * 60 * 24 * 7 // 1 week

        }));

     

        // Redirect back after setting cookie

        res.statusCode = 302;

        res.setHeader('Location', req.headers.referer || '/');

        res.end();

        return;

      }

     

      // Parse the cookies on the request

      var cookies = cookie.parse(req.headers.cookie || '');

     

      // Get the visitor name set in the cookie

      var name = cookies.name;

     

      res.setHeader('Content-Type', 'text/html; charset=UTF-8');

     

      if (name) {

        res.write('<p>Welcome back, <b>' + escapeHtml(name) + '</b>!</p>');

      } else {

        res.write('<p>Hello, new visitor!</p>');

      }

     

      res.write('<form method="GET">');

      res.write('<input placeholder="enter your name" name="name"> <input type="submit" value="Set Name">');

      res.end('</form');

    }

     

    http.createServer(onRequest).listen(3000);

    4 ke

    var cookie = require('cookie');

    var escapeHtml = require('escape-html');

    var http = require('http');

    var url = require('url');

     

    function onRequest(req, res) {

      // Parse the query string

      var query = url.parse(req.url, true, true).query;

     

      if (query && query.name) {

        // Set a new cookie with the name

        res.setHeader('Set-Cookie', cookie.serialize('name', String(query.name), {

          httpOnly: true,

          maxAge: 60 * 60 * 24 * 7 // 1 week

        }));

     

        // Redirect back after setting cookie

        res.statusCode = 302;

        res.setHeader('Location', req.headers.referer || '/');

        res.end();

        return;

      }

     

      // Parse the cookies on the request

      var cookies = cookie.parse(req.headers.cookie || '');

     

      // Get the visitor name set in the cookie

      var name = cookies.name;

     

      res.setHeader('Content-Type', 'text/html; charset=UTF-8');

     

      if (name) {

        res.write('<p>Welcome back, <b>' + escapeHtml(name) + '</b>!</p>');

      } else {

        res.write('<p>Hello, new visitor!</p>');

      }

     

      res.write('<form method="GET">');

      res.write('<input placeholder="enter your name" name="name"> <input type="submit" value="Set Name">');

      res.end('</form');

    }

     

    http.createServer(onRequest).listen(3000);

    8 untuk penegakan situs yang sama ketat

Informasi lebih lanjut tentang tingkat penerapan yang berbeda dapat ditemukan di spesifikasi

catatan Ini adalah atribut yang belum sepenuhnya terstandarisasi, dan dapat berubah di masa mendatang. Ini juga berarti banyak klien mungkin mengabaikan atribut ini sampai mereka memahaminya

aman

Menentukan nilai

var cookies = cookie.parse('foo=bar; equation=E%3Dmc%5E2');

// { foo: 'bar', equation: 'E=mc^2' }

_7 untuk atribut [

$ npm test

8

var cookie = require('cookie-parse');

3][rfc-6265-5. 2. 5]. Jika benar, atribut

$ npm test

8 disetel, jika tidak, tidak. Secara default, atribut

$ npm test

_8 tidak disetel

perhatikan hati-hati saat mengatur ini ke

var setCookie = cookie.serialize('foo', 'bar');

// foo=bar

2, karena klien yang patuh tidak akan mengirim cookie kembali ke server di masa mendatang jika browser tidak memiliki koneksi HTTPS

Contoh

Contoh berikut menggunakan modul ini bersama dengan Node. Server HTTP js core untuk meminta nama pengguna dan menampilkannya kembali pada kunjungan berikutnya

Ada lima langkah. .
Baca daftar cookie dari dokumen. Kue kering
Pisahkan daftar menjadi cookie individual
Pisahkan setiap cookie menjadi nama dan nilai
Indeks cookie dengan nama
Ambil dan dekode nilai cookie yang diperlukan
cookie-parser adalah middleware yang mem-parsing cookie yang dilampirkan ke objek permintaan klien . Untuk menggunakannya, kami akan membutuhkannya di index. berkas js; . Di sini, kita akan menggunakan kode berikut. var cookieParser = memerlukan('cookie-parser'); .
Pendekatan 1. .
Akses cookie menggunakan dokumen. Kue kering
Menggunakan. metode split() untuk membaginya menjadi “;”
Lintasi deretan cookie
Tambahkan semua cookie satu per satu dalam string untuk dicetak
Ini akan menjadi proses sederhana dengan langkah-langkah berikut. .
Dapatkan setiap pasangan nilai kunci dari string cookie menggunakan string. membelah(";")
Pisahkan kunci dari nilai di setiap pasangan menggunakan string. pisahkan(“=”)
Buat objek dengan semua pasangan kunci-nilai dan kembalikan objek