Cookie vs. sesi

189

Saya mulai menggunakan PHP beberapa bulan yang lalu. Demi membuat sistem login untuk situs web saya, saya membaca tentang cookie dan sesi dan perbedaannya (cookie disimpan di browser pengguna dan sesi di server). Pada saat itu, saya lebih suka cookie (dan siapa yang tidak suka cookie ?!) dan hanya berkata: "siapa yang peduli? Saya tidak punya kesepakatan baik untuk menyimpannya di server saya", jadi, saya pergi ke depan dan menggunakan cookie untuk proyek kelulusan sarjana saya. Namun, setelah melakukan sebagian besar aplikasi saya, saya mendengar bahwa untuk kasus penyimpanan ID pengguna, sesi lebih tepat. Jadi saya mulai berpikir tentang apa yang akan saya katakan jika juri bertanya kepada saya mengapa Anda menggunakan cookie daripada sesi? Saya hanya punya alasan itu (bahwa saya tidak perlu menyimpan informasi internal tentang pengguna).? atau lebih dari itu?
Bisakah Anda memberi tahu saya tentang keuntungan / kerugian menggunakan cookie untuk menyimpan ID Pengguna?

Terima kasih untuk Anda semua di StackOverflow!

Nadjib Mami
sumber
2
Kedua metode menyimpan data . Cookie melakukannya di sisi klien, yaitu pada penyimpanan perangkat pengunjung Anda. Sesi adalah "ekstensi" yang pintar karena mereka hanya menyimpan ID unik di sisi klien dan semua data aktual di sisi server. Ketika mereka menerima ID unik dari cookie klien, mereka tahu data apa yang dimuat di server. Dalam kebanyakan kasus, sesi akan menjadi apa yang Anda butuhkan. Omong-omong, Anda dapat mengelola keduanya dengan github.com/delight-im/PHP-Cookie dengan cara yang lebih modern.
gak
Sebagai tambahan, inti WordPress meninggalkan penggunaan sesi beberapa tahun yang lalu dan sekarang hanya menggunakan cookie . Menarik. Saya bertanya-tanya apakah mereka melakukan itu untuk membuatnya lebih mudah untuk digunakan di satu set server dengan beban yang seimbang dan / atau untuk mengurangi logout acak karena pengumpulan sampah sesi.
Simon East

Jawaban:

230

Konsep ini menyimpan data persisten di seluruh pemuatan halaman untuk pengunjung web. Cookie menyimpannya langsung di klien. Sesi menggunakan cookie sebagai kunci pengurutan, untuk dikaitkan dengan data yang disimpan di sisi server.

Lebih disukai menggunakan sesi karena nilai aktual disembunyikan dari klien, dan Anda mengontrol kapan data kedaluwarsa dan menjadi tidak valid. Jika semuanya didasarkan pada cookie, pengguna (atau peretas) dapat memanipulasi data cookie mereka dan kemudian memainkan permintaan ke situs Anda.

Sunting: Saya rasa tidak ada keuntungan menggunakan cookie, selain dari kesederhanaan. Lihatlah dengan cara ini ... Apakah pengguna memiliki alasan untuk mengetahui ID # mereka? Biasanya saya akan mengatakan tidak, pengguna tidak memerlukan informasi ini. Memberikan informasi harus dibatasi berdasarkan kebutuhan untuk mengetahui. Bagaimana jika pengguna mengubah cookie-nya untuk memiliki ID yang berbeda, bagaimana tanggapan aplikasi Anda? Ini risiko keamanan.

Sebelum sesi adalah semua kemarahan, saya pada dasarnya memiliki implementasi sendiri. Saya menyimpan nilai cookie unik pada klien, dan menyimpan data persisten saya di database bersama dengan nilai cookie itu. Kemudian pada permintaan halaman saya mencocokkan nilai-nilai itu dan memiliki data persisten saya tanpa membiarkan klien mengontrol apa itu.

Fosco
sumber
29
@ JimimCricket Saya tidak berpikir itu benar ... jika demikian, tidak ada yang akan menggunakan variabel sesi untuk menyimpan pengguna yang saat ini masuk - dan semua orang melakukannya. Ini akan menjadi risiko keamanan yang sangat besar. Cukup yakin bahwa biasanya ID sesi akan disimpan sebagai cookie di mesin klien, dan kemudian dicocokkan dengan sisi server dengan data sesi. Server biasanya tidak mengontrol sesi melalui alamat IP, melainkan melalui nilai cookie.
John M.
1
Baru-baru ini saya mulai menggunakan hanya cookie lagi, semata-mata karena sesi membuat halaman tidak dimuat jika ada satu lagi yang saat ini dieksekusi dari sesi yang sama, kecuali jika Anda mengawali setiap halaman dengan session_write_close();saat Anda membutuhkannya. Memutar ID unik Anda sendiri dan mencocokkannya dengan cookie biasa tidak begitu sulit, dan membuat semua halamannya bagus dan cepat.
Brian Leishman
Apakah Anda pikir saya harus menggunakan sesi untuk otentikasi? Apakah ada risiko keamanan? Bagaimana dengan seorang hacker mencoba mengubah id sesi-nya, bagaimana tanggapan server (misalkan id sesi tebakan valid)?
O-BL
Gunakan sesi dan kemudian 2FA sebagai sesi dapat dibajak.
Zakir Sajib
120

Ide dasar untuk membedakan keduanya.

Sidang:

  1. IDU disimpan di server (yaitu sisi server)
  2. Lebih aman (karena 1)
  3. Kedaluwarsa tidak dapat diatur, variabel sesi akan kedaluwarsa saat pengguna menutup browser. (saat ini disimpan selama 24 menit sebagai default di php)

Kue:

  1. IDU disimpan di web-browser (yaitu sisi klien)
  2. Tidak terlalu aman, karena peretas dapat mencapai dan mendapatkan informasi Anda (karena 1)
  3. Kedaluwarsa dapat diatur (lihat setcookies () untuk informasi lebih lanjut)

Sesi lebih disukai ketika Anda perlu menyimpan informasi / nilai jangka pendek, seperti variabel untuk menghitung, mengukur, menanyakan, dll.

Cookie lebih disukai ketika Anda perlu menyimpan informasi / nilai jangka panjang, seperti akun pengguna (sehingga bahkan ketika mereka mematikan komputer selama 2 hari, akun mereka akan tetap masuk). Saya tidak bisa memikirkan banyak contoh untuk cookie karena tidak diadopsi di sebagian besar situasi.

Reyske
sumber
6
Sadarilah: Ini BUKAN jawaban yang bagus. Ini dimulai cukup ok tetapi membingungkan hal-hal dan berakhir dengan disinformasi. Ini bukan penjelasan sesi vs. cookie. Ini adalah sesi vs sesi + penjelasan cookie sesi. Cookie saja tidak disukai karena alasan yang disebutkan. Sesi + cookie sesi lebih disukai karena alasan yang disebutkan.
markus
Kesalahan lain adalah bahwa Anda memiliki pengaruh pada masa sesi melalui konfigurasi PHP.
markus
1
Sesi masih menetapkan cookie pada browser pengguna, jadi penjelasan sisi server-klien ini tidak akurat
Zalaboza
sesi kedaluwarsa dapat diatur oleh aplikasi apa pun dengan mudah. Poin ke-3 salah. Plus Anda lupa jumlah data yang dapat disimpan dalam cookie vs sesi. Itu poin yang lebih signifikan
saran3h
1
Apa arti IDU?
Simon East
45
SESSIONS ENDS WHEN USER CLOSES THEIR BROWSER,

COOKIES END DEPENDING ON THE LIFETIME YOU SET FOR IT. SO THEY CAN LAST FOR YEARS

Ini adalah perbedaan utama dalam pilihan Anda,

Jika Anda ingin id diingat untuk waktu yang lama, maka Anda perlu menggunakan cookie; jika tidak, jika Anda hanya ingin situs web mengenali pengguna untuk kunjungan ini saja maka sesi adalah cara untuk pergi.

Sesi disimpan dalam file yang akan dihasilkan oleh server php Anda. Untuk mengingat file mana untuk pengguna yang mana, php juga akan menetapkan cookie pada browser pengguna yang menyimpan id file sesi ini sehingga dalam kunjungan berikutnya php akan membaca file ini dan memuat ulang sesi tersebut.

Sekarang php secara default menghapus sesi setiap interval, dan juga penamaan konvensi sesi membuatnya otomatis kedaluwarsa. Selain itu, browser tidak akan menyimpan cookie yang menyimpan id sesi setelah browser ditutup atau riwayat dihapus.

Penting untuk dicatat bahwa saat ini browser juga mendukung jenis mesin penyimpanan lain seperti LocalStorage, SessionStorage, dan mesin webdb lain yang dapat digunakan kode javascript untuk menyimpan data ke komputer Anda agar dapat mengingat Anda. Jika Anda membuka konsol javascript di dalam Facebook, misalnya, dan ketik "localStorage" Anda akan melihat semua variabel yang digunakan Facebook untuk mengingat Anda tanpa cookie.

Zalaboza
sumber
16
Sebenarnya, secara default sesi berlangsung hingga pengguna menutup browser mereka, TETAPI ini dapat diubah dalam file php.ini dengan mengubah 0 di session.cookie_lifetime = 0 menjadi jumlah detik Anda ingin sesi berlangsung, atau dengan menggunakan session_set_cookie_params ().
DOK
1
Informasi bermanfaat lebih lanjut, pertanyaan seperti itu yang mendapatkan banyak jawaban .. bagus, terima kasih lagi DOK!
Nadjib Mami
1
Perlu diingat juga bahwa titik tunggal dari file sesi kegagalan dapat dibuat. Ketika serangan gaya dos terkecil terjadi melalui proxy, ip switcher atau zombie file sesi dibuat di hard disk server atau ssd Anda. Jika Anda tidak dapat mengikuti baca tulis situs Anda akan turun.
Shawn E Carter
Adakah yang bisa clafiry: "SESI SELESAI SAAT PENGGUNA TUTUP BROWSER HIS" 1. bagaimana jika pengguna menavigasi awya dari halaman .. kemudian kembali tanpa menutup browser. 2. bagaimana jika mereka memiliki beberapa jendela browser / tab terbuka yang menunjuk ke situs yang sama? beberapa aplikasi web di tempat kerja menjadi bingung dalam situasi ini, tetapi saya tidak tahu jenis cookie apa yang mereka gunakan.
jcansell
1
@ jcansell juga, cookie tidak akan bingung oleh multi-tab atau menavigasi, dalam kasus seperti itu kemungkinan besar aplikasi web ini menggunakan penyimpanan lokal / penyimpanan sesi untuk menyimpan data menggunakan javascript
Zalaboza
20

saat Anda menyimpan #ID sebagai cookie untuk mengenali pengguna yang masuk, Anda sebenarnya menunjukkan data kepada pengguna yang tidak terkait dengan mereka. Selain itu, jika pihak ketiga mencoba menetapkan ID acak sebagai data cookie di browser mereka, mereka akan dapat meyakinkan server bahwa mereka adalah pengguna sementara sebenarnya tidak. Itu kurangnya keamanan.

Anda telah menggunakan cookie, dan seperti yang Anda katakan Anda telah menyelesaikan sebagian besar proyek. Selain itu cookie memiliki hak istimewa untuk tetap untuk waktu yang lama, sementara sesi berakhir lebih cepat. Jadi sesi tidak cocok dalam kasus ini. Pada kenyataannya, banyak situs web dan layanan yang terkenal dan populer menggunakan cookie dan Anda dapat tetap masuk untuk waktu yang lama. Tetapi bagaimana Anda bisa menggunakan metode mereka untuk membuat proses login yang lebih aman?

inilah idenya: Anda dapat membantu cara Anda menggunakan cookie: Jika Anda menggunakan kunci acak alih-alih ID untuk mengenali pengguna yang masuk, pertama, Anda tidak membocorkan data primer Anda ke pengguna acak, dan kedua, Jika Anda mempertimbangkan Acak cukup besar, akan lebih sulit bagi siapa pun untuk menebak kunci atau membuat kunci acak. misalnya Anda dapat menyimpan kunci sepanjang 40 seperti ini di peramban Pengguna: "KUYTYRFU7987gJHFJ543JHBJHCF5645UYTUYJH54657jguthfn" dan kecil kemungkinan bagi siapa pun untuk membuat kunci yang tepat dan berpura-pura menjadi orang lain.

Makan Tayebi
sumber
1
Penjelasan yang bagus. Saya menggunakan GUID dalam token untuk mengenali pengguna individu.
Karthik
18

Jawaban singkat

Aturan dipesan berdasarkan prioritas:

  • Aturan 1. Jangan pernah mempercayai input pengguna: cookie tidak aman. Gunakan sesi untuk data sensitif.
  • Aturan 2. Jika data persisten harus tetap ada saat pengguna menutup browser, gunakan cookie.
  • Aturan 3. Jika data yang persisten tidak harus tetap ketika pengguna menutup browser, gunakan sesi.
  • Aturan 4. Baca jawaban terinci!

Sumber: https://www.lucidar.me/en/web-dev/sessions-or-cookies/


Jawaban terinci

Kue

  • Cookie disimpan di sisi klien (di browser pengunjung).
  • Cookie tidak aman: cukup mudah untuk membaca dan menulis konten cookie.
  • Saat menggunakan cookie, Anda harus memberi tahu pengunjung sesuai dengan undang-undang Eropa (GDPR).
  • Kedaluwarsa dapat diatur, tetapi pengguna atau browser dapat mengubahnya.
  • Pengguna (atau browser) dapat (disetel ke) menolak penggunaan cookie.

Sesi

  • Sesi disimpan di sisi server.
  • Sesi menggunakan cookie (lihat di bawah).
  • Sesi lebih aman daripada cookie, tetapi tidak kebal.
  • Kedaluwarsa diatur dalam konfigurasi server (misalnya php.ini).
  • Waktu kedaluwarsa default adalah 24 menit atau ketika browser ditutup.
  • Kedaluwarsa diatur ulang saat pengguna menyegarkan atau memuat halaman baru.
  • Pengguna (atau browser) dapat (disetel ke) menolak penggunaan cookie, oleh karena itu sesi.
  • Secara hukum, Anda juga harus memberi tahu pengunjung tentang kuki, tetapi kurangnya preseden belum jelas.

Pilihan yang tepat

Sesi menggunakan cookie! Data sesi disimpan di sisi server, tetapi UID disimpan di sisi klien dalam cookie. Hal ini memungkinkan server untuk mencocokkan pengguna yang diberikan dengan data sesi yang tepat. UID dilindungi dan sulit diretas, tetapi tidak kebal. Untuk tindakan sensitif (mengubah email atau mengatur ulang kata sandi), jangan mengandalkan sesi maupun cookie: minta kata sandi pengguna untuk mengonfirmasi tindakan.

Data sensitif tidak boleh disimpan dalam cookie (email, kata sandi terenkripsi, data pribadi ...). Ingatlah bahwa data disimpan di komputer asing, dan jika komputer itu tidak pribadi (ruang kelas atau komputer publik) orang lain berpotensi membaca konten cookie.

Data Remember-me harus disimpan dalam cookie, jika tidak, data akan hilang ketika pengguna menutup browser. Namun, jangan menyimpan kata sandi atau data pribadi pengguna dalam cookie 'ingat-saya'. Simpan data pengguna dalam basis data dan tautkan data ini dengan sepasang kunci / ID terenkripsi yang disimpan dalam cookie.

Setelah mempertimbangkan rekomendasi sebelumnya, pertanyaan berikut adalah yang akhirnya membantu Anda memilih antara cookie dan sesi:

Haruskah data yang tetap ada saat pengguna menutup browser?

  • Jika jawabannya ya , gunakan cookie .
  • Jika jawabannya tidak , gunakan sesi .
Fifi
sumber
13

Sebenarnya, sesi dan cookie tidak selalu merupakan hal yang terpisah. Seringkali, tetapi tidak selalu, sesi menggunakan cookie.

Ada beberapa jawaban yang bagus untuk pertanyaan Anda dalam pertanyaan-pertanyaan lain di sini. Karena pertanyaan Anda secara khusus tentang menyimpan IDU pengguna (atau ID) pengguna, saya pikir itu bukan duplikat dari pertanyaan-pertanyaan lain, tetapi jawaban mereka akan membantu Anda.

cookie vs sesi

Cache VS Session VS cookies?

Apa perbedaan antara Sesi dan Cookie?

DOK
sumber
10

Saya pribadi menggunakan cookie dan sesi.

Cookie hanya digunakan ketika pengguna mengklik kotak centang "ingat saya" . dan juga cookie dienkripsi dan data hanya didekripsi di server. Jika ada yang mencoba mengedit cookie, decrypter kami dapat mendeteksi dan menolak permintaan tersebut.

Saya telah melihat banyak situs di mana info login disimpan dalam cookie , siapa pun bisa dengan mudah mengubah id dan nama pengguna pengguna dalam cookie untuk mengakses akun siapa pun.

Terima kasih,

Muhammad Sanaullah
sumber
2

Sesi dan Cookie tidak sama.

Sesi digunakan untuk menyimpan informasi dari halaman web. Biasanya halaman web tidak memiliki ingatan untuk menyimpan informasi ini. Tetapi menggunakan kami dapat menyimpan informasi yang diperlukan.

Tetapi Cookie digunakan untuk mengidentifikasi pengguna. Menggunakan cookie, kita dapat menyimpan data. Ini adalah bagian kecil dari data yang akan disimpan di browser web pengguna. Jadi, setiap kali pengguna menelusuri browser lain kali mengirim kembali informasi data cookie ke server untuk mendapatkan kegiatan sebelumnya.

Kredit: Sesi dan Cookie

pengguna3824494
sumber
Bagaimana jika pengguna menonaktifkan cookie? Bagaimana cookie mengidentifikasi pengguna?
SohailRajput
1

Sesi memungkinkan Anda menyimpan setiap informasi seperti halnya cookie, tetapi data disimpan di server alih-alih klien.

fuddin
sumber
0

Seperti yang dikatakan orang lain, Sesi itu pintar dan lebih menguntungkan menyembunyikan informasi dari klien.

Tetapi Cookie masih memiliki setidaknya satu keuntungan , Anda dapat mengakses Cookie Anda dari Javascript (Misalnya ngCookies ). Dengan sesi PHP Anda tidak dapat mengaksesnya di mana pun di luar skrip PHP.

Kamalakannan J
sumber
1
Anda dapat .. Tidak secara langsung tentu saja, Anda dapat mengaksesnya melalui beberapa permintaan ajax ke skrip yang mengembalikan data sesi. Tapi saya tidak yakin Anda harus melakukannya.
l00k
0

Saya akan memilih Sesi, pertama-tama sesi lebih aman daripada cookie, cookie adalah data situs klien dan sesi adalah data situs server. Cookie digunakan untuk mengidentifikasi pengguna, karena itu adalah potongan-potongan kecil kode yang tertanam di server saya dengan browser komputer pengguna. Di sisi lain, Sesi membantu Anda untuk mengamankan identitas Anda karena server web tidak tahu siapa Anda karena alamat HTTP mengubah status 192.168.0.1 menjadi 765487cf34ert8ded ..... ..atau nomor lain dengan bantuan metode GET dan POST. Sesi menyimpan data pengguna dalam sesi ID unik yang bahkan ID pengguna tidak dapat saling cocok. Sesi menyimpan informasi pengguna tunggal di semua halaman dalam satu aplikasi. Cookie kedaluwarsa diatur dengan bantuan setcookies () sedangkan sesi kedaluwarsa tidak disetel itu berakhir ketika pengguna mematikan browser.

Wasiq Mahmood WM
sumber
0

Sesi adalah sekelompok informasi di server yang terkait dengan informasi cookie. Jika Anda menggunakan PHP, Anda dapat memeriksa sesi. simpan _ lokasi jalur dan sebenarnya "lihat sesi". Cookie adalah cuplikan data yang dikirim ke dan dikembalikan dari klien. Cookie sering digunakan untuk memfasilitasi sesi karena memberitahu server mana klien menangani sesi yang mana. Ada cara lain untuk melakukan ini (sihir string kueri dll) tetapi cookie kemungkinan paling umum untuk ini.

Megersa
sumber