Bagaimana cookie dilewatkan dalam protokol HTTP?


Jawaban:


296

Server mengirimkan yang berikut ini di header responsnya untuk menetapkan bidang cookie.

Set-Cookie:nilai nama=

Jika ada set cookie, maka browser mengirim yang berikut ini di header permintaannya.

Cookie:nilai nama=

Lihat artikel Cookie HTTP di Wikipedia untuk informasi lebih lanjut.


Benarkah cookie hanya berfungsi dengan kata kerja GET / POST, tetapi tidak TERHUBUNG?
PerlDev

5
@PerlDev Tidak ada yang bisa saya lihat di rfc2109 yang mengatakan bahwa itu tidak boleh bekerja dengan permintaan selain GET / POST, tapi saya menduga bahwa implementasi browser dan server mungkin tidak mengimplementasikannya dalam kasus tersebut.
deinst

5
Perhatikan bahwa menurut RFC 2109 jika agen pengguna atau browser mengirim banyak cookie, itu akan menempatkan mereka dalam bidang tunggal yang dibatasi oleh tanda titik koma:Cookie: name1=value1; name2=value2; ...
jotrocken

34

Cookie dilewatkan sebagai header HTTP, baik dalam permintaan (klien -> server), dan dalam respons (server -> klien).


2
jadi dalam setiap permintaan yang dibuat, apakah semua cookie ipso facto dikirim?
BKSpurgeon

32

Terlepas dari apa yang tertulis dalam jawaban lain, perincian lain yang terkait dengan jalur cookie, usia maksimum cookie, baik yang diamankan atau tidak juga diteruskan dalam header respons Set-Cookie. Misalnya:

Set-Cookie:=nilai nama [ ; expires=tanggal ] [ ; domain=domain ] [ ; path=jalur ] [ ; secure]


Namun, tidak semua detail ini dikembalikan ke server oleh klien saat membuat permintaan HTTP berikutnya.

Anda juga dapat mengatur HttpOnlybendera di akhir cookie Anda, untuk menunjukkan bahwa cookie Anda adalah httponly dan tidak boleh diakses, dalam skrip dengan kode javascript. Ini membantu untuk mencegah serangan seperti pembajakan sesi.

Untuk informasi lebih lanjut, lihat RFC 2109 . Lihat juga artikel Nicholas C. Zakas, cookie HTTP menjelaskan .


2
Berikut adalah tautan langsung ke artikel Zakas, daripada tautan jalan mundur
Joseph Dykstra

13

buat skrip contoh sebagai resp:

#!/bin/bash

http_code=200
mime=text/html

echo -e "HTTP/1.1 $http_code OK\r"
echo "Content-type: $mime"
echo
echo "Set-Cookie: name=F"

kemudian jadikan executable dan eksekusi seperti ini.

./resp | nc -l -p 12346

buka browser dan jelajahi URL: http: // localhost: 1236 Anda akan melihat nilai Cookie yang dikirim oleh Browser

    [aaa @ bbbbbbbb] $ ./resp | nc-l -p 12346
    DAPATKAN / HTTP / 1.1
    Host: xxx.xxx.xxx.xxx:12346
    Koneksi: tetap hidup
    Kontrol Cache: usia maks = 0
    Terima: teks / html, aplikasi / xhtml + xml, aplikasi / xml; q = 0,9, gambar / webp, * / *; q = 0,8
    Tingkatkan-Tidak-Aman-Permintaan: 1
    Agen Pengguna: Mozilla / 5.0 (Windows NT 6.1) AppleWebKit / 537.36 (KHTML, seperti Gecko) Chrome / 49.0.2623.112 Safari / 537.36
    Terima-Pengkodean: gzip, deflate, sdch
    Bahasa Terima: en-AS, en; q = 0.8, ru; q = 0.6
    Cookie: name = F

3
Bagaimana jika ada banyak cookie? Apakah mereka dipisahkan oleh koma?
Mark Buikema

pikir mereka ditetapkan sebagai cookie baru. Cookie: name = F Cookie: name = A
EAzevedo

2
@MarkBuikema, lihat docs.microsoft.com/en-us/windows/desktop/wininet/http-cookies . Mereka dikirim seperti: Cookie: <name> = <value> [; <name> = <value>] ...
Ben Wheeler
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.