Bagaimana cara kerja sesi PHP? (bukan "bagaimana mereka digunakan?")

127

File sesi biasanya disimpan di, misalnya, /tmp/di server, dan dinamai sess_{session_id}. Saya telah melihat isinya dan tidak tahu bagaimana cara kerjanya.

Mengambil nama variabel dan konten dari file itu mudah. Tetapi bagaimana PHP tahu sesi apa milik siapa?

The session_id tampaknya benar-benar acak dan satu alamat IP dapat memiliki beberapa pengguna, dan setiap pengguna dapat memiliki beberapa sesi jika mereka memiliki lebih dari satu jendela browser terbuka.

Jadi bagaimana cara kerjanya?

Christoffer
sumber

Jawaban:

202

Dalam situasi umum:

  • id sesi dikirim ke pengguna saat sesi dibuat.
  • itu disimpan dalam cookie (disebut, secara default, PHPSESSID)
  • cookie yang dikirim oleh browser ke server dengan setiap permintaan
  • server (PHP) menggunakan cookie itu, yang berisi session_id, untuk mengetahui file mana yang sesuai dengan pengguna itu.

Data dalam file sesi adalah konten $_SESSION, serial (yaitu, direpresentasikan sebagai string - dengan fungsi seperti cerita bersambung ) ; dan un-serialized saat file dimuat oleh PHP, untuk mengisi $_SESSIONarray.


Kadang-kadang, id sesi tidak disimpan dalam cookie, tetapi dikirim dalam URL juga - tapi itu sangat jarang, saat ini.


Untuk informasi lebih lanjut, Anda dapat melihat bagian Penanganan Sesi manual, yang memberikan beberapa informasi berguna.

Misalnya, ada halaman tentang Melewati ID Sesi , yang menjelaskan bagaimana id sesi diteruskan dari halaman ke halaman, menggunakan cookie, atau dalam URL - dan opsi konfigurasi mana yang memengaruhi ini.

Pascal MARTIN
sumber
5
Bagaimana cara perangkat seluler (dari aplikasi asli) menangani sesi secara normal? Menyimpan ID sesi? Atau apakah OAuth ini ikut?
Adam Waite
13

Bagaimana Sesi PHP Bekerja

  • Pertama-tama PHP membuat angka pengidentifikasi unik panjang 16 byte (disimpan sebagai string dengan 32 karakter heksadesimal, misalnya a86b10aeb5cd56434f8691799b1d9360) untuk satu sesi.

  • Cookie PHPSESSID meneruskan nomor identifikasi unik itu ke browser pengguna untuk menyimpan nomor itu.

  • File baru dibuat di server dengan nama nomor identifikasi unik yang sama dengan awalan sess_ (mis sess_a86b10aeb5cd56434f8691799b1d9360.)

  • Browser mengirim cookie itu ke server dengan setiap permintaan.

  • Jika PHP mendapatkan nomor identifikasi unik dari cookie PHPSESSID (pada setiap permintaan), maka PHP mencari di direktori sementara dan membandingkan nomor itu dengan nama file. Jika keduanya sama, maka akan mengambil sesi yang ada, jika tidak, akan membuat sesi baru untuk pengguna tersebut.

Sesi hancur ketika pengguna menutup browser atau meninggalkan situs. Server juga mengakhiri sesi setelah periode waktu sesi yang ditentukan berakhir. Ini adalah langkah-langkah mekanisme sederhana yang digunakan PHP untuk menangani sesi. Saya harap artikel ini membantu Anda memahami cara kerja PHP SESSION.

Lihat artikel ini untuk lebih jelasnya. Bagaimana Sesi PHP Bekerja

Sohel Rana
sumber
Tetapi jika saya, katakanlah, masuk ke situs tertentu (alias: dalam satu sesi), dan buka tab baru mysite.com/cart. Saya juga akan mendapatkan "Halo Joe Doe, 5 pesan, ini daftar keranjang belanja Anda ..." alias informasi sesi. - Tetapi mengapa browser mengenai tab kosong ini mengirimkan Session-ID bersama dengan GET-Request? pembaruan cepat: Ah, temukan jawabannya: +)
Frank Nocke
Bisakah saya bertanya bagaimana id sesi dapat memberikan keamanan? Misalnya Jika pengguna masuk, dan tiba di profilnya, daripada mengubah parameter url untuk mengakses profil pengguna yang berbeda, bagaimana id sesi dapat mencegah hal ini?
Andrewboy
4

ID sesi memang acak, dan diteruskan dalam cookie atau URL, tergantung pada konfigurasi. Anda mungkin sudah melihat PHPSESSID = xxxx ini di beberapa URL, ada cookie dengan nama itu juga.

Julien Lebosquain
sumber
2

Sesi dalam PHP dimulai dengan menggunakan fungsi session_start (). Seperti fungsi setcookie (), fungsi session_start () harus muncul sebelum HTML apa pun, termasuk baris kosong, di halaman. Ini akan terlihat seperti ini: <?php session_start( );?><html><head> ....... dll. Fungsi session_start () menghasilkan Id Sesi acak dan menyimpannya dalam cookie di komputer pengguna (ini adalah satu-satunya informasi sesi yang sebenarnya disimpan di sisi klien. ) Nama default untuk cookie adalah PHPSESSID, meskipun ini dapat diubah dalam file konfigurasi PHP di server (namun sebagian besar perusahaan hosting akan membiarkannya sendiri.) Untuk referensi Id sesi dalam kode PHP Anda, karena itu Anda akan referensi variabel $ PHPSESSID (itu nama cookie; ingat itu dari Cookie?)

Akbor
sumber