← Semua artikel

Cookie vs Session: Cara Website Menyimpan Identitas Pengguna

Diperbarui 30 Oct 2026

Kamu login ke sebuah website, pindah halaman, lalu status login tetap bertahan. Browser ditutup dan dibuka lagi, kadang kamu masih tetap login. Shopping cart juga masih ada meskipun kamu sudah membuka beberapa halaman berbeda.

Padahal HTTP pada dasarnya tidak otomatis mengingat bahwa request sekarang berasal dari pengguna yang sama dengan request sebelumnya.

Untuk mempertahankan keadaan atau state tersebut, website biasanya menggunakan mekanisme seperti cookie dan session.

Keduanya sering disebut bersamaan, tetapi sebenarnya cookie dan session bukan hal yang sama. Cookie disimpan dan dikirim oleh browser, sedangkan session biasanya merupakan data yang dikelola di sisi server dan sering dihubungkan ke browser melalui sebuah session ID.

Memahami perbedaannya penting untuk troubleshooting login, authentication, web application, API, testing browser, proxy, load balancing, maupun keamanan aplikasi.

Kenapa Website Membutuhkan Cookie atau Session?

HTTP bersifat stateless secara desain dasar.

Bayangkan request pertama:

GET /login

kemudian request berikutnya:

GET /dashboard

Tanpa mekanisme state tambahan, server perlu cara untuk mengetahui apakah kedua request tersebut berasal dari pengguna yang sama dan apakah pengguna sudah berhasil login.

Di sinilah cookie dan session sering digunakan.

Apa Itu Cookie?

Cookie adalah data kecil berbentuk pasangan nama dan nilai yang disimpan oleh user agent seperti browser dan dikirim kembali pada request yang sesuai.

Contohnya:

session_id=abc123

Server dapat meminta browser menyimpan cookie melalui response header:

Set-Cookie: session_id=abc123

Pada request berikutnya browser dapat mengirim:

Cookie: session_id=abc123

Dengan begitu server dapat mengenali state yang berkaitan dengan browser tersebut.

Bagaimana Alur Cookie Bekerja?

Browser
→
Server
Login
Browser
←
Set-Cookie
session_id=abc123
Browser
Cookie: abc123
→
Server

Apa Itu Session?

Session adalah state sementara yang biasanya dikelola server untuk menyimpan informasi mengenai interaksi pengguna.

Contohnya server menyimpan:

session_id: abc123 user_id: 854 logged_in: true role: member cart_items: 3

Browser tidak harus menyimpan seluruh data tersebut.

Browser biasanya hanya menyimpan identifier:

session_id=abc123

Server kemudian memakai ID tersebut untuk mencari data session.

Cookie dan Session Bekerja Bersama

Ini bagian yang sering membuat bingung.

Cookie dan session bukan dua mekanisme yang selalu berdiri sendiri.

Sering kali session menggunakan cookie sebagai penghubung.

Browser
Cookie session_id
→
Server
Session Store
→
User Data

Contoh Login dengan Session

Misalnya pengguna login.

1. Browser Mengirim Credential

POST /login username=budi password=********

2. Server Memverifikasi Login

Jika benar, server membuat session:

session_id = x7f91abc

3. Server Menyimpan Session

x7f91abc → user_id 1001 → logged_in true

4. Browser Mendapat Cookie

Set-Cookie: session_id=x7f91abc

5. Request Berikutnya

GET /dashboard Cookie: session_id=x7f91abc

Server membaca ID tersebut lalu mengetahui pengguna mana yang sedang login.

Cookie vs Session Apa Bedanya?

Aspek Cookie Session
Lokasi utama Browser/client Server/session store
Isi Nama dan nilai State aplikasi
Dikirim setiap request Cookie yang cocok bisa dikirim Data session tidak dikirim seluruhnya
Identifikasi Bisa menyimpan identifier Sering dicari melalui session ID
Ukuran Relatif kecil Dapat menyimpan state lebih kompleks di server

Apakah Session Selalu Menggunakan Cookie?

Tidak harus.

Session identifier secara teori dapat dibawa melalui mekanisme lain.

Tetapi pada aplikasi web browser modern, cookie merupakan salah satu cara paling umum untuk membawa session ID.

Apa Itu Session ID?

Session ID adalah identifier yang menghubungkan client dengan session tertentu di server.

Contohnya:

session_id=F8d72Kd91x

Server kemudian mempunyai mapping:

F8d72Kd91x ↓ User 492 ↓ Logged In

Session ID harus dibuat cukup sulit ditebak jika digunakan untuk authentication.

Apakah Data User Sebaiknya Disimpan Langsung di Cookie?

Untuk data sensitif, biasanya lebih aman menyimpan identifier session daripada seluruh informasi sensitif langsung di cookie.

Contoh yang lebih baik:

Cookie: session_id=abc123

daripada:

Cookie: user_id=100 role=admin password=...

Data cookie berada di sisi client dan pengguna dapat melihat atau memodifikasi data tertentu jika aplikasi tidak melindunginya dengan benar.

Jangan menyimpan password atau secret sensitif langsung di cookie.

Apa Itu Set-Cookie?

Set-Cookie adalah response header yang digunakan server untuk meminta browser menyimpan cookie.

Set-Cookie: session_id=abc123

Set-Cookie juga dapat mempunyai atribut:

Set-Cookie: session_id=abc123; Secure; HttpOnly; SameSite=Lax; Path=/

Apa Itu Cookie Header?

Browser mengirim cookie kembali melalui request header:

Cookie: session_id=abc123

Kalau ada beberapa cookie:

Cookie: session_id=abc123; language=id; theme=dark

Apa Itu Session Cookie?

Session cookie biasanya merujuk pada cookie yang tidak memiliki expiration persisten seperti Expires atau Max-Age.

Contoh:

Set-Cookie: session_id=abc123

Secara umum cookie tersebut ditujukan bertahan selama browser session.

Namun browser dapat mempunyai session restore behavior, sehingga detail masa hidup sebenarnya dapat berbeda.

Apa Itu Persistent Cookie?

Persistent cookie mempunyai waktu expiration.

Contoh:

Set-Cookie: language=id; Max-Age=2592000

Nilai tersebut membuat cookie dapat bertahan lebih lama daripada satu browser session.

Expires vs Max-Age

Ada dua atribut umum untuk masa hidup cookie.

Atribut Fungsi
Expires Menentukan tanggal expiration absolut.
Max-Age Menentukan masa hidup relatif dalam detik.

MDN merekomendasikan Max-Age sebagai pilihan yang lebih sederhana pada banyak kasus dan menjelaskan bahwa Max-Age memiliki precedence jika keduanya digunakan. :chatgpt-content-reference{index="1"}

Contoh Max-Age

Set-Cookie: preference=dark; Max-Age=86400

86400 detik sama dengan sekitar satu hari.

Cara Menghapus Cookie

Server dapat mengirim cookie dengan nama, domain, dan path yang sesuai lalu membuat expiration-nya habis.

Contoh:

Set-Cookie: session_id=; Max-Age=0; Path=/

Browser kemudian menghapus cookie tersebut sesuai rule-nya.

Apa Itu Domain Attribute?

Domain menentukan host mana yang dapat menerima cookie.

Contohnya:

Set-Cookie: language=id; Domain=example.com

Scope domain perlu dibuat sesempit yang memang diperlukan.

Apa Itu Path Attribute?

Path membatasi path URL tempat cookie dikirim.

Contoh:

Set-Cookie: admin_session=abc; Path=/admin

Cookie tersebut terkait dengan path tertentu sesuai aturan cookie.

Apa Itu Secure Cookie?

Atribut Secure meminta browser mengirim cookie melalui koneksi secure seperti HTTPS.

Set-Cookie: session_id=abc123; Secure

Untuk session authentication, penggunaan Secure sangat penting saat aplikasi berjalan melalui HTTPS.

MDN merekomendasikan penggunaan Secure untuk cookie sensitif agar cookie tidak dikirim melalui koneksi HTTP biasa. :chatgpt-content-reference{index="2"}

Apa Itu HttpOnly?

HttpOnly membatasi akses JavaScript seperti:

document.cookie

terhadap cookie tersebut.

Contohnya:

Set-Cookie: session_id=abc123; HttpOnly

Ini sangat berguna untuk session identifier karena dapat mengurangi risiko pencurian session ID melalui JavaScript ketika terjadi XSS.

Secure vs HttpOnly

Atribut Melindungi dari
Secure Mencegah pengiriman cookie melalui HTTP biasa.
HttpOnly Mencegah akses cookie melalui JavaScript tertentu.

Keduanya mempunyai fungsi berbeda dan sering digunakan bersama.

Apa Itu SameSite?

SameSite mengontrol apakah cookie dikirim pada request cross-site tertentu.

Nilainya antara lain:

SameSite=Strict SameSite=Lax SameSite=None

Atribut ini membantu mengurangi risiko tertentu seperti CSRF dan mengontrol penggunaan cookie lintas site. :chatgpt-content-reference{index="3"}

Apa Itu SameSite=Strict?

Strict merupakan opsi paling ketat.

Cookie hanya dikirim pada kondisi same-site yang memenuhi aturan browser.

Set-Cookie: session=abc; SameSite=Strict

Ini cocok untuk cookie yang tidak perlu dikirim saat navigasi berasal dari site lain.

Apa Itu SameSite=Lax?

Lax lebih fleksibel.

Browser masih dapat mengirim cookie dalam beberapa top-level navigation yang berasal dari site lain.

Set-Cookie: session=abc; SameSite=Lax

Apa Itu SameSite=None?

None digunakan ketika cookie memang perlu dikirim pada cross-site context.

Set-Cookie: widget_session=abc; SameSite=None; Secure

Pada browser modern, SameSite=None perlu dipasangkan dengan Secure. :chatgpt-content-reference{index="4"}

Menguji Session dari Jalur Proxy Berbeda?

GudangProxy menyediakan daftar proxy gratis berdasarkan negara, protokol, tingkat anonimitas, dan status koneksi. Kamu dapat memakai endpoint yang sesuai untuk testing website atau aplikasi yang memang kamu kelola sambil memperhatikan bahwa cookie, session, dan IP merupakan state yang berbeda.

Lihat Daftar Proxy Gratis →

Apa Hubungan Cookie dengan Login?

Website sering menggunakan cookie untuk menyimpan session ID setelah login.

Contoh:

Login berhasil ↓ Set-Cookie session_id ↓ Browser simpan ↓ Request berikutnya bawa Cookie ↓ Server mengenali user

Karena itu menghapus cookie session sering membuat pengguna logout.

Kenapa Menghapus Cookie Bisa Membuat Logout?

Misalnya server mempunyai:

Session abc123 → User Budi

Browser sebelumnya menyimpan:

session_id=abc123

Setelah cookie dihapus, browser tidak lagi mengirim session ID.

Server kemudian tidak mempunyai identifier untuk menghubungkan request dengan session sebelumnya.

Apakah Session Server Langsung Hilang Saat Cookie Dihapus?

Belum tentu.

Browser hanya kehilangan identifier.

Data session di server mungkin masih ada sampai:

  • expired,
  • logout diproses,
  • session store dibersihkan,
  • administrator menghapusnya.

Logout yang Baik Harus Bagaimana?

Logout idealnya tidak hanya menghapus cookie di browser.

Server juga sebaiknya menginvalidasi session yang berkaitan.

Logout ↓ Invalidate session server ↓ Delete cookie browser

Dengan begitu session ID lama tidak bisa digunakan kembali.

Apa Itu Session Expiration?

Session server biasanya mempunyai batas waktu.

Contohnya:

Session expires after: 30 minutes inactivity

atau:

Absolute lifetime: 8 hours

Application dapat mempunyai policy berbeda sesuai kebutuhan keamanan.

Idle Timeout vs Absolute Timeout

Jenis Arti
Idle Timeout Session expired setelah tidak aktif selama periode tertentu.
Absolute Timeout Session expired setelah umur maksimum tercapai.

Apa Itu Remember Me?

Fitur Remember Me biasanya membuat authentication bertahan lebih lama dibanding session login biasa.

Implementasinya dapat menggunakan:

  • persistent token,
  • cookie jangka panjang,
  • server-side token store.

Jangan sekadar membuat session ID biasa hidup selamanya.

Apa Itu Session Fixation?

Session fixation adalah kondisi ketika attacker berusaha membuat korban menggunakan session identifier yang sudah diketahui attacker.

Karena itu setelah authentication berhasil, aplikasi sebaiknya membuat atau melakukan regenerasi session identifier.

MDN juga merekomendasikan regenerasi session cookie saat user melakukan authentication untuk membantu mencegah session fixation. :chatgpt-content-reference{index="5"}

Apa Itu Session Hijacking?

Session hijacking terjadi ketika pihak lain memperoleh session identifier yang valid lalu menggunakannya untuk menyamar sebagai session pengguna tersebut.

Risikonya meningkat jika:

  • session ID bocor,
  • cookie tidak memakai Secure,
  • XSS mencuri cookie tanpa HttpOnly,
  • session terlalu lama hidup,
  • logout tidak menginvalidasi session.
Session ID harus diperlakukan seperti credential sementara.

Apakah Cookie Dienkripsi?

Tidak otomatis.

Cookie merupakan data.

HTTPS melindungi transport ketika cookie dikirim melalui koneksi TLS, tetapi nilai cookie itu sendiri tidak otomatis terenkripsi hanya karena disebut cookie.

Aplikasi dapat menggunakan signing atau encryption tambahan jika diperlukan.

Apakah Cookie Bisa Diubah Pengguna?

Secara umum pengguna mempunyai kontrol terhadap data pada browser mereka sendiri.

Karena itu aplikasi tidak boleh mempercayai nilai client-side secara buta.

Contoh buruk:

role=admin

lalu server langsung mempercayai nilai tersebut tanpa validasi.

Cookie Sebaiknya Menyimpan Apa?

Contoh penggunaan yang umum:

  • session identifier,
  • language preference,
  • theme,
  • consent preference,
  • shopping cart identifier.

Hindari menyimpan data sensitif mentah tanpa alasan.

Cookie vs Local Storage

Browser juga memiliki Web Storage seperti localStorage.

Keduanya berbeda.

Aspek Cookie localStorage
Dikirim otomatis ke server Bisa, jika scope cocok Tidak
Diakses JavaScript Bisa kecuali HttpOnly Ya
Umum untuk session ID Ya Perlu pertimbangan keamanan khusus

Apa Hubungan Cookie dengan HTTP Header?

Cookie bekerja melalui HTTP header:

Response: Set-Cookie Request: Cookie

Jadi artikel kemarin tentang HTTP Header merupakan fondasi untuk memahami bagaimana cookie berpindah antara browser dan server.

Proxy Mengubah Cookie?

Proxy biasa tidak otomatis menghapus atau mengganti cookie.

Alurnya bisa tetap:

Browser ↓ Cookie Proxy ↓ Cookie Website

Kecuali proxy memang dikonfigurasi untuk memodifikasi header atau content tertentu.

Ganti Proxy Apakah Session Ikut Berubah?

Tidak otomatis.

Misalnya:

Session Cookie: abc123 Proxy A: Indonesia Proxy B: Singapore

Kalau browser yang sama tetap membawa cookie abc123, website masih dapat menghubungkan request dengan session yang sama.

IP Berubah tetapi Cookie Tetap Sama

Contohnya:

Request 1
IP: Indonesia
Cookie: session=abc123

Request 2
IP: Singapore
Cookie: session=abc123

Server dapat melihat bahwa IP berubah tetapi session identifier tetap sama.

Bagaimana server memperlakukan kondisi tersebut tergantung security policy aplikasi.

Website Bisa Mengikat Session ke IP?

Bisa, tetapi tidak selalu.

Beberapa aplikasi dapat menggunakan perubahan IP sebagai sinyal keamanan.

Namun mengikat session secara terlalu ketat ke satu IP juga bisa menyebabkan masalah untuk pengguna yang:

  • berpindah WiFi/mobile,
  • menggunakan CGNAT,
  • mempunyai dynamic IP,
  • berada pada jaringan yang exit IP-nya berubah.

Proxy Rotating dan Session

Rotating proxy dapat mengubah exit IP antarrequest.

Request 1 → IP A Request 2 → IP B Request 3 → IP C

Kalau website mempertahankan session melalui cookie, session browser masih bisa sama meskipun IP berubah.

Tetapi website dapat mempunyai security rule yang menganggap perubahan IP terlalu sering sebagai aktivitas tidak biasa.

Sticky Proxy dan Login Session

Untuk testing alur yang membutuhkan konsistensi network, sticky session proxy dapat mempertahankan exit IP untuk beberapa waktu.

Login ↓ IP A Dashboard ↓ IP A Checkout ↓ IP A

Hal ini berbeda dari session aplikasi, tetapi keduanya sama-sama menggunakan istilah “session”.

Sticky proxy session dan web application session adalah dua konsep berbeda.

Proxy Session vs Website Session

Jenis Fungsi
Proxy Sticky Session Mempertahankan exit proxy/IP tertentu.
Web Session Mempertahankan state pengguna pada aplikasi.

Cookie dan Geo Testing

Cookie dapat memengaruhi hasil geo testing.

Misalnya website menyimpan:

country=ID

Kamu kemudian mengganti proxy ke Singapura.

Website dapat tetap menggunakan preference dari cookie dan menampilkan versi Indonesia.

Karena itu untuk pengujian lokasi, jangan hanya melihat exit IP.

Baca juga Proxy Geolocation.

Kenapa Incognito Berguna untuk Testing?

Incognito/private window biasanya memulai storage yang lebih terpisah dari browser session normal.

Ini membantu mengurangi pengaruh:

  • cookie lama,
  • session lama,
  • local storage tertentu.

Tetapi incognito tidak otomatis mengubah:

  • public IP,
  • timezone,
  • DNS,
  • User-Agent.

Cookie dan Browser Profile

Browser profile berbeda dapat mempunyai cookie store berbeda.

Contohnya:

Profile A → login akun A Profile B → login akun B

Ini sering lebih rapi daripada terus menghapus cookie satu per satu saat testing.

Session dan Load Balancer

Pada aplikasi dengan banyak backend server:

Browser
→
Load Balancer
→
Server A / B / C

Session harus tetap dapat diakses meskipun request berikutnya masuk ke backend berbeda.

Masalah Session Jika Disimpan Lokal di Satu Server

Misalnya:

Request 1 → Server A → session ada Request 2 → Server B → session tidak ada

Pengguna bisa terlihat logout secara acak.

Solusi Shared Session Store

Application dapat menggunakan central session store seperti:

  • Redis,
  • database,
  • distributed cache.

Dengan begitu semua backend dapat membaca session yang sama.

Server A ┐ Server B ├→ Shared Session Store Server C ┘

Apa Itu Sticky Session Load Balancer?

Load balancer dapat mengarahkan satu pengguna ke backend yang sama selama periode tertentu.

Contohnya:

User A → Server 1 → Server 1 → Server 1

Ini disebut session persistence atau sticky session dalam konteks load balancing.

Lagi-lagi ini berbeda dari cookie/session browser itu sendiri, walaupun cookie bisa dipakai sebagai mekanisme routing.

Cookie Bisa Digunakan Load Balancer?

Bisa.

Load balancer tertentu dapat menggunakan cookie untuk mempertahankan affinity ke backend tertentu.

Contoh konseptual:

LB_SERVER=A

Request berikutnya diarahkan kembali ke Server A.

Session pada API

API tidak selalu menggunakan browser session.

Banyak API menggunakan token seperti:

Authorization: Bearer TOKEN

Tetapi API berbasis browser masih dapat menggunakan cookie session.

Cookie Authentication vs Bearer Token

Aspek Cookie Session Bearer Token
Transport umum Cookie header Authorization header
Browser otomatis kirim Ya, sesuai scope Biasanya aplikasi menambahkan sendiri
CSRF concern Perlu diperhatikan Berbeda tergantung storage/implementation

Apa Itu CSRF?

Cross-Site Request Forgery terjadi ketika browser yang sudah login dibuat mengirim request yang tidak diinginkan ke website lain dengan credential yang otomatis terbawa.

SameSite membantu mengurangi sebagian risiko tersebut.

Aplikasi juga dapat menggunakan anti-CSRF token sesuai arsitekturnya.

Apa Itu XSS dan Hubungannya dengan Cookie?

Cross-Site Scripting memungkinkan script berbahaya berjalan dalam konteks website jika aplikasi mempunyai vulnerability.

Kalau cookie session dapat diakses JavaScript:

document.cookie

script bisa mencoba membacanya.

Karena itu session cookie biasanya sebaiknya menggunakan HttpOnly.

Cookie yang Lebih Aman

Contoh konfigurasi session cookie:

Set-Cookie: session_id=abc123; Path=/; Secure; HttpOnly; SameSite=Lax

Konfigurasi ideal tetap harus disesuaikan dengan kebutuhan aplikasi.

Apa Itu __Secure- Prefix?

Browser modern mendukung prefix tertentu untuk menambahkan requirement keamanan pada cookie.

Contoh:

__Secure-session

Cookie dengan prefix tersebut perlu mengikuti requirement seperti penggunaan Secure pada secure origin yang mendukung mekanisme ini. :chatgpt-content-reference{index="6"}

Apa Itu __Host- Prefix?

__Host- memberikan constraint lebih ketat.

Contohnya:

Set-Cookie: __Host-session=abc123; Secure; HttpOnly; Path=/

Cookie jenis ini tidak menggunakan Domain dan scope-nya dibatasi ke host yang menetapkannya sesuai aturan browser yang mendukung prefix tersebut. :chatgpt-content-reference{index="7"}

Third-Party Cookie

Third-party cookie berkaitan dengan cookie yang digunakan pada cross-site context.

Contohnya sebuah website memuat content dari domain lain:

site-a.com ↓ iframe / resource ↓ third-party.com

Kebijakan browser modern semakin membatasi third-party cookie karena alasan privacy. :chatgpt-content-reference{index="8"}

First-Party vs Third-Party Cookie

Jenis Konteks
First-party Cookie berkaitan dengan site yang sedang dikunjungi.
Third-party Cookie digunakan pada cross-site embedded/request context.

Kenapa Cookie Tidak Muncul?

Beberapa penyebab umum:

  • Domain salah,
  • Path tidak cocok,
  • cookie sudah expired,
  • Secure cookie digunakan lewat HTTP,
  • SameSite memblokir cross-site request,
  • browser privacy policy,
  • third-party cookie diblokir.

Kenapa Session Sering Hilang?

Penyebabnya bisa:

  • cookie session hilang,
  • session expired,
  • session store restart,
  • load balancer salah konfigurasi,
  • domain cookie salah,
  • Path salah,
  • HTTPS/Secure mismatch,
  • session ID tidak diregenerasi dengan benar.

Troubleshooting Cookie dan Session

1. Buka Developer Tools

DevTools → Application / Storage → Cookies

Lihat apakah cookie memang tersimpan.

2. Cek Network Request

Network → Request → Headers → Cookie

Pastikan browser benar-benar mengirim cookie.

3. Cek Response

Set-Cookie

Pastikan server mengirim cookie dengan atribut yang sesuai.

4. Cek Expiration

Pastikan cookie belum expired.

5. Cek Domain dan Path

Cookie mungkin tersimpan tetapi tidak cocok dengan URL yang sedang dibuka.

6. Cek Session Store

Pastikan session ID masih ada di server.

Cara Melihat Cookie dengan cURL

Response header dapat dilihat dengan:

curl -I https://example.com

Atau verbose:

curl -v https://example.com

Menyimpan Cookie dengan cURL

Gunakan cookie jar:

curl \ -c cookies.txt \ https://example.com/login

File tersebut dapat menyimpan cookie yang diterima.

Mengirim Cookie Kembali

curl \ -b cookies.txt \ https://example.com/dashboard

Dengan pola ini kamu bisa melakukan debugging flow session secara lebih terkontrol.

Cookie dan Proxy dengan cURL

Kamu juga bisa menggabungkan proxy dan cookie jar:

curl \ -x http://203.0.113.20:8080 \ -c cookies.txt \ -b cookies.txt \ https://example.com/

Ini membantu membedakan:

  • masalah session,
  • masalah cookie,
  • masalah proxy,
  • masalah IP.

Ganti Proxy tapi Gunakan Cookie Lama?

Bisa secara teknis jika aplikasi memperbolehkannya.

Namun hasilnya tergantung policy server.

Server bisa:

  • menerima session,
  • meminta login ulang,
  • melakukan verification tambahan,
  • menandai perubahan IP sebagai risk signal.

Cookie dan Browser Fingerprinting Berbeda

Cookie adalah state eksplisit yang disimpan browser.

Fingerprinting menggunakan kombinasi karakteristik browser/device untuk mencoba membedakan client.

Jadi menghapus cookie tidak otomatis menghapus semua signal lain yang dapat digunakan website.

Topik browser fingerprinting sebaiknya dibahas terpisah karena intent-nya berbeda.

Cookie dan Cache Juga Berbeda

Cookie menyimpan state.

Cache menyimpan salinan resource untuk mengurangi transfer ulang.

Fitur Cookie Cache
Tujuan utama Menyimpan state/identifier Menyimpan response/resource
Contoh session_id CSS, JS, image, response

Kesalahan Umum Tentang Cookie dan Session

  • menganggap cookie dan session adalah hal yang sama,
  • menganggap session selalu disimpan di browser,
  • menyimpan data sensitif mentah di cookie,
  • menganggap Secure sama dengan HttpOnly,
  • menganggap SameSite=None tidak membutuhkan Secure,
  • tidak menginvalidasi session saat logout,
  • menggunakan session ID yang terlalu mudah ditebak,
  • menganggap ganti proxy otomatis membuat session baru,
  • menganggap IP dan session adalah identitas yang sama,
  • mengabaikan expiration cookie.

Checklist Session Cookie yang Baik

Bagian Yang Dicek
Session ID Random dan sulit ditebak.
Secure Aktif pada HTTPS.
HttpOnly Aktif jika JavaScript tidak perlu mengakses cookie.
SameSite Disesuaikan dengan flow aplikasi.
Path Dibuat sesempit yang diperlukan.
Domain Tidak dibuat terlalu luas.
Expiration Tidak terlalu panjang.
Logout Session server diinvalidasi.
Login Session identifier diregenerasi.

FAQ Cookie vs Session

Apa beda cookie dan session?

Cookie disimpan pada browser/client dan dapat dikirim pada HTTP request, sedangkan session biasanya merupakan state yang disimpan di sisi server dan dihubungkan ke client melalui session identifier.

Apakah session disimpan di cookie?

Biasanya yang disimpan di cookie adalah session ID, bukan seluruh data session. Data session utamanya tetap berada di server.

Apa fungsi Set-Cookie?

Set-Cookie adalah response header yang digunakan server untuk meminta browser menyimpan cookie.

Apa fungsi Cookie header?

Cookie header digunakan browser untuk mengirim kembali cookie yang berlaku kepada server.

Apa fungsi Secure?

Secure membatasi cookie agar dikirim melalui koneksi secure seperti HTTPS.

Apa fungsi HttpOnly?

HttpOnly mencegah JavaScript biasa seperti document.cookie mengakses cookie tersebut.

Apa fungsi SameSite?

SameSite mengontrol kapan cookie dikirim pada request cross-site dan dapat membantu mengurangi risiko CSRF serta kebocoran cookie lintas site.

Apakah mengganti proxy membuat session baru?

Tidak otomatis. Jika browser masih membawa session cookie yang sama, website masih dapat mengenali session yang sama meskipun exit IP berubah.

Kenapa saya logout setelah menghapus cookie?

Karena browser kehilangan session identifier yang digunakan server untuk menghubungkan request dengan session login sebelumnya.

Apakah session ID harus dirahasiakan?

Ya. Session ID authentication harus diperlakukan seperti credential sementara karena pihak yang memperoleh session ID valid bisa berpotensi menyalahgunakannya.