Gambaran
Express.js menggunakan cookie untuk menyimpan id sesi (dengan tanda tangan enkripsi) di browser pengguna dan kemudian, pada permintaan berikutnya, menggunakan nilai cookie itu untuk mengambil informasi sesi yang disimpan di server. Penyimpanan sisi server ini dapat berupa penyimpanan memori (default) atau penyimpanan lain yang menerapkan metode yang diperlukan (seperti connect-redis ).
Detail
Express.js / Connect membuat string Base64 24 karakter menggunakan utils.uid(24)
dan menyimpannya di req.sessionID
. String ini kemudian digunakan sebagai nilai dalam cookie.
Sisi klien
Cookie yang ditandatangani selalu digunakan untuk sesi, jadi nilai cookie akan memiliki format berikut.
[sid].[signature]
Di mana [sid] adalah sessionID dan [tanda tangan] dihasilkan dengan menandatangani [sid] menggunakan kunci rahasia yang disediakan saat menginisialisasi session middleware. Langkah penandatanganan dilakukan untuk mencegah gangguan. Ini harus secara komputasi tidak dapat diukur untuk memodifikasi [sid] dan kemudian membuat ulang [tanda tangan] tanpa pengetahuan tentang kunci rahasia yang digunakan. Cookie sesi masih rentan terhadap pencurian dan penggunaan kembali, jika tidak diperlukan modifikasi [sid].
Nama untuk cookie ini adalah
connect.sid
Sisi server
Jika penangan muncul setelah middleware cookieParser
dan session
itu akan memiliki akses ke variabel req.cookies
. Ini berisi objek JSON yang kuncinya adalah kunci cookie dan nilainya adalah nilai cookie. Ini akan berisi kunci bernamaconnect.sid
dan nilainya akan menjadi pengidentifikasi sesi yang ditandatangani.
Berikut adalah contoh cara menyiapkan rute yang akan memeriksa keberadaan cookie sesi di setiap permintaan dan mencetak nilainya ke konsol.
app.get("/*", function(req, res, next) {
if(typeof req.cookies['connect.sid'] !== 'undefined') {
console.log(req.cookies['connect.sid']);
}
next(); // Call the next middleware
});
Anda juga harus memastikan router ( app.use(app.router)
) disertakan setelah cookieParser
dan session
di bagian konfigurasi Anda.
Berikut ini adalah contoh data yang disimpan secara internal oleh Express.js / Connect.
{
"lastAccess": 1343846924959,
"cookie": {
"originalMaxAge": 172800000,
"expires": "2012-08-03T18:48:45.144Z",
"httpOnly": true,
"path": "/"
},
"user": {
"name":"waylon",
"status":"pro"
}
}
The user
lapangan kustom. Yang lainnya adalah bagian dari manajemen sesi.
Contohnya dari Express 2.5.
Cobalah untuk melihat jawaban ini dan hal-hal wiki .
Ya, biasanya cookie dengan ID sesi yang ditetapkan, yang harus ditandatangani dengan rahasia untuk mencegah pemalsuan.
Anda tidak boleh mengacaukan cookie sesi di sisi klien. Jika Anda ingin bekerja dengan sesi di sisi server, Anda harus memeriksa express.js terkait dan menghubungkan dokumen.
sumber
Selain jawaban yang sudah bagus, berikut adalah 2 diagram yang saya buat untuk menjelaskan sesi Express, tautannya dengan cookie dan penyimpanan:
sumber