Saya baru mulai belajar pengembangan aplikasi web, menggunakan python. Saya menemukan istilah 'cookie' dan 'sesi'. Saya mengerti cookie karena mereka menyimpan beberapa info dalam pasangan nilai kunci di browser. Tetapi saya memiliki sedikit kebingungan mengenai sesi, dalam sesi juga kami menyimpan data dalam cookie di browser pengguna.
Misalnya - Saya masuk menggunakan username='rasmus'
dan password='default'
. Dalam kasus seperti itu, data akan diposting ke server yang seharusnya memeriksa dan masuk jika dikonfirmasi. Namun selama seluruh proses server juga menghasilkan ID sesi yang akan disimpan dalam cookie di browser saya. Sekarang server juga menyimpan ID sesi ini dalam sistem file atau datastore-nya.
Tetapi berdasarkan hanya pada ID sesi, bagaimana ia bisa mengetahui nama pengguna saya selama traversal berikutnya melalui situs ini? Apakah itu menyimpan data di server sebagai dict di mana kuncinya akan menjadi ID sesi dan rincian seperti username
, email
dll. Menjadi nilainya?
Saya agak bingung di sini. Butuh bantuan.
sumber
Jawaban:
Karena HTTP tidak memiliki kewarganegaraan, untuk mengaitkan permintaan ke permintaan lain, Anda memerlukan cara untuk menyimpan data pengguna di antara permintaan HTTP.
Cookies atau parameter URL (misalnya, misalnya http://example.com/myPage?asd=lol&boo=no ) keduanya merupakan cara yang sesuai untuk mengirim data antara 2 atau lebih permintaan. Namun mereka tidak baik jika Anda tidak ingin data tersebut dapat dibaca / diedit di sisi klien.
Solusinya adalah menyimpan sisi server data itu, berikan "id", dan beri tahu klien hanya (dan berikan kembali pada setiap permintaan http) id itu. Ini dia, sesi dilaksanakan. Atau Anda dapat menggunakan klien sebagai penyimpanan jarak jauh yang mudah digunakan, tetapi Anda akan mengenkripsi data dan menjaga sisi server rahasia.
Tentu saja ada aspek-aspek lain untuk dipertimbangkan, seperti Anda tidak ingin orang membajak sesi orang lain, Anda ingin sesi tidak bertahan selamanya tetapi berakhir, dan sebagainya.
Dalam contoh spesifik Anda, id pengguna (bisa berupa nama pengguna atau ID unik lain dalam basis data pengguna Anda) disimpan dalam data sesi, sisi server, setelah identifikasi berhasil. Kemudian untuk setiap permintaan HTTP yang Anda dapatkan dari klien, id sesi (yang diberikan oleh klien) akan mengarahkan Anda ke data sesi yang benar (disimpan oleh server) yang berisi id pengguna terautentikasi - dengan cara itu kode Anda akan tahu pengguna apa itu sedang berbicara.
sumber
Penjelasan sederhana dengan analogi
Bayangkan Anda berada di bank, mencoba mengeluarkan uang dari akun Anda. Tapi gelap; bank gelap gulita: tidak ada cahaya dan Anda tidak dapat melihat tangan Anda di depan wajah Anda. Anda dikelilingi oleh 20 orang lainnya. Mereka semua terlihat sama. Dan setiap orang memiliki suara yang sama. Dan setiap orang adalah orang jahat potensial. Dengan kata lain, HTTP tidak memiliki kewarganegaraan.
Bank ini adalah jenis bank yang lucu - demi argumen, inilah cara kerjanya:
Tetapi bagaimana teller akan memberi tahu Anda berbeda dari orang lain?
Teller tidak dapat melihat atau dengan mudah mengenali Anda, ingat, karena semua lampu mati. Bagaimana jika teller Anda memberikan penarikan $ 10.000 Anda kepada orang lain - orang yang salah? Sangat penting bahwa teller dapat mengenali Anda sebagai orang yang melakukan penarikan, sehingga Anda bisa mendapatkan uang (atau sumber daya) yang Anda minta.
Larutan:
Ketika Anda pertama kali muncul di kasir, ia memberi tahu Anda sesuatu secara rahasia:
Tidak ada orang lain yang tahu kode sandi rahasia.
Contoh Bagaimana Saya Menarik Uang Tunai:
Jadi saya memutuskan untuk pergi dan bersantai selama 20 menit dan kemudian saya pergi ke kasir dan mengatakan "Saya ingin mengambil uang saya"
Teller bertanya kepada saya: "siapa kamu ??!"
"Ini saya, Tuan George Banks!"
"Buktikan itu!"
Dan kemudian saya memberi tahu mereka kode sandi saya: GNASHEU329
"Tentu saja, Tuan Banks!"
Itu pada dasarnya adalah bagaimana sebuah sesi bekerja. Hal ini memungkinkan seseorang untuk diidentifikasi secara unik di lautan jutaan orang. Anda perlu mengidentifikasi diri Anda setiap kali Anda berurusan dengan teller.
Jika Anda memiliki pertanyaan atau tidak jelas - silakan kirim komentar dan saya akan mencoba menjernihkannya untuk Anda.
Penjelasan melalui Gambar:
sumber
GNASHEU329
adalah kata sandi pengguna, yang menghasilkan token autentikasi yang kedaluwarsa hingga waktu tertentu; Mr Banks kemudian dapat menggunakan token auth untuk melakukan beberapa penarikan berturut-turut tanpa harus berulang kali memberi kasir kepada teller kata sandinya?"Sesi" adalah istilah yang digunakan untuk merujuk pada waktu pengguna menelusuri situs web. Ini dimaksudkan untuk merepresentasikan waktu antara kedatangan pertama mereka di sebuah halaman di situs sampai saat mereka berhenti menggunakan situs. Dalam praktiknya, tidak mungkin untuk mengetahui kapan pengguna selesai dengan situs tersebut. Di sebagian besar server ada batas waktu yang secara otomatis mengakhiri sesi kecuali halaman lain diminta oleh pengguna yang sama.
Pertama kali pengguna menghubungkan beberapa jenis sesi ID dibuat (cara melakukannya tergantung pada perangkat lunak server web dan jenis otentikasi / login yang Anda gunakan di situs). Seperti cookie, ini biasanya tidak dikirim lagi ke URL karena ini masalah keamanan. Sebaliknya itu disimpan bersama dengan banyak hal lain yang secara kolektif juga disebut sebagai sesi. Variabel sesi seperti cookie - mereka pasangan nama-nilai yang dikirim bersama dengan permintaan untuk halaman, dan dikembalikan dengan halaman dari server - tetapi nama mereka didefinisikan dalam standar web.
Beberapa variabel sesi diteruskan sebagai tajuk HTTP . Mereka bolak-balik di belakang layar setiap halaman penelusuran sehingga mereka tidak muncul di browser dan memberi tahu semua orang sesuatu yang mungkin bersifat pribadi. Diantaranya adalah USER_AGENT, atau jenis browser yang meminta halaman, REFERRER atau halaman yang ditautkan ke halaman yang diminta, dll. Beberapa perangkat lunak server web menambahkan header mereka sendiri atau mentransfer data sesi tambahan khusus untuk perangkat lunak server. Tetapi yang standar didokumentasikan dengan cukup baik.
Semoga itu bisa membantu.
sumber
Like cookies, this usually doesn't get sent in the URL anymore
dan kemudianSession variables are like cookies - they're name-value pairs sent along with a request for a page
. Apa yang sebenarnya terjadi? Apakah itu dikirim saat Anda membuat permintaan lain kali?HTTP adalah protokol koneksi stateless, yaitu, server tidak dapat membedakan antara koneksi yang berbeda dari pengguna yang berbeda.
Oleh karena itu, muncul cookie, setelah klien menghubungkan pertama kali ke server, server menghasilkan id sesi baru, yang nantinya akan dikirim ke klien sebagai nilai cookie. Dan mulai sekarang, id sesi ini akan mengidentifikasi koneksi klien itu, karena di dalam setiap permintaan HTTP ia akan melihat id sesi yang sesuai di dalam cookie.
Sekarang untuk setiap sesi id, server menyimpan beberapa struktur data, yang memungkinkan dia untuk menyimpan data khusus untuk pengguna, struktur data ini Anda dapat memanggil sesi secara abstrak.
sumber
Pikirkan HTTP sebagai seseorang (A) yang memiliki KEHILANGAN MEMORI JANGKA PENDEK dan melupakan setiap orang begitu orang tersebut hilang dari pandangan.
Sekarang, untuk mengingat orang yang berbeda, A mengambil foto orang itu dan menyimpannya. Foto Setiap Orang memiliki nomor ID. Ketika orang itu kembali terlihat, orang itu memberitahukan nomor IDnya ke A dan A menemukan gambar mereka berdasarkan nomor ID. Dan voila !!, A tahu siapa orang itu.
Sama dengan HTTP. Itu menderita KERUGIAN MEMORI JANGKA PENDEK. Ini menggunakan Sesi untuk merekam semua yang Anda lakukan saat menggunakan situs web, dan kemudian, ketika Anda datang lagi, itu mengidentifikasi Anda dengan bantuan Cookie (Cookie seperti token). Gambar adalah Sesi di sini, dan ID adalah Cookie di sini.
sumber