HTTP adalah protokol tanpa kewarganegaraan karena suatu alasan. Sesi mengelas status ke HTTP. Sebagai aturan praktis, hindari menggunakan status sesi.
UPDATE: Tidak ada konsep sesi di tingkat HTTP; server memberikan ini dengan memberikan ID unik kepada klien dan memberi tahu klien untuk mengirim ulang pada setiap permintaan. Kemudian server menggunakan ID itu sebagai kunci ke hashtable besar dari objek Sesi. Setiap kali server mendapat permintaan, ia mencari info Sesi dari hashtable objek sesi berdasarkan ID yang dikirimkan klien dengan permintaan. Semua pekerjaan ekstra ini adalah whammy ganda pada skalabilitas (alasan utama HTTP tidak memiliki kewarganegaraan).
- Whammy One: Ini mengurangi pekerjaan yang bisa dilakukan oleh satu server.
- Whammy Two: Membuat skala lebih sulit karena sekarang Anda tidak bisa hanya merutekan permintaan ke server lama - mereka tidak semua memiliki sesi yang sama. Anda dapat menyematkan semua permintaan dengan ID sesi yang diberikan ke server yang sama. Itu tidak mudah, dan itu adalah satu titik kegagalan (bukan untuk sistem secara keseluruhan, tetapi untuk sebagian besar pengguna Anda). Atau, Anda bisa berbagi penyimpanan sesi di semua server di cluster, tetapi sekarang Anda memiliki lebih banyak kerumitan: memori yang terpasang jaringan, server sesi yang berdiri sendiri, dll.
Mengingat semua itu, semakin banyak info yang Anda masukkan dalam sesi, semakin besar dampaknya pada kinerja (seperti yang ditunjukkan Vinko). Juga seperti yang ditunjukkan Vinko, jika objek Anda tidak dapat diubah serial, sesi akan bertingkah buruk. Jadi, sebagai aturan praktis, hindari menempatkan lebih dari yang benar-benar diperlukan dalam sesi.
@ Vinko Anda biasanya dapat mengatasi keadaan toko server dengan menyematkan data yang Anda lacak dalam respons yang Anda kirim kembali dan meminta klien mengirim ulang, misalnya, mengirimkan data ke dalam input tersembunyi. Jika Anda benar - benar membutuhkan pelacakan sisi-server, itu mungkin harus di datastore dukungan Anda.
(Vinko menambahkan: PHP dapat menggunakan database untuk menyimpan informasi sesi, dan meminta klien mengirimkan kembali data setiap kali dapat memecahkan masalah skalabilitas potensial, tetapi membuka kaleng besar masalah keamanan Anda harus memperhatikan sekarang bahwa klien mengendalikan semua negara Anda)