Rumah > hujung hadapan web > tutorial js > Penjelasan terperinci tentang penggunaan Sesi klien dalam Node.js programming_node.js

Penjelasan terperinci tentang penggunaan Sesi klien dalam Node.js programming_node.js

WBOY
Lepaskan: 2016-05-16 15:53:22
asal
1151 orang telah melayarinya

Laman web statik mudah berskala. Anda hanya cache semuanya dan tidak perlu memikirkan tentang menggabungkan kandungan stateful dari pelayan yang berbeza kepada pengguna.

Malangnya, kebanyakan aplikasi web menggunakan kandungan stateful untuk memberikan pengalaman yang diperibadikan. Jika aplikasi anda boleh log masuk, ia perlu mengingati Sesi pengguna. Kaedah pemprosesan klasik ialah pelanggan menetapkan kuki yang mengandungi pengecam Sesi unik rawak, dan data Sesi yang dikenal pasti disimpan ke pelayan.


Melanjutkan perkhidmatan stateful

Apabila mengembangkan perkhidmatan anda, anda pasti mempunyai tiga pilihan:

  1. Segerakkan data Sesi antara pelayan berbeza
  2. Pelayan yang berbeza menyambung ke pusat satu titik (mendapatkan Sesi)
  3. Pastikan pengguna mengakses pelayan yang sama

Tetapi semuanya mempunyai kelemahan:

  • Menyegerakkan data meningkatkan prestasi overhed
  • Pusat titik tunggal mengurangkan kebolehskalaan sistem
  • Apa yang perlu dilakukan jika pelayan yang dilawati pengguna kali terakhir memerlukan penyelenggaraan

Namun, jika anda memikirkannya dari sudut lain, anda akan menemui pilihan keempat: simpan data Sesi pada klien


Sesi Pelanggan

Menyimpan Sesi pada pelanggan mempunyai beberapa kelebihan:

  • Tidak kira pelayan mana, data sesi adalah sah
  • Tidak perlu mengekalkan status pelayan
  • Tiada penyegerakan pelayan diperlukan
  • Tambah pelayan baharu sesuka hati

Tetapi terdapat masalah serius dengan Sesi sebelah pelanggan: anda tidak boleh menjamin bahawa pengguna tidak akan mengganggu data Sesi.


Sebagai contoh, anda menyimpan ID pengguna dalam kuki. Ia boleh diubah suai dengan mudah oleh pengguna untuk mendapatkan akses kepada akaun orang lain.

Ini nampaknya menafikan kemungkinan Sesi sebelah pelanggan, tetapi ada cara untuk menyelesaikan masalah ini dengan kemas: menyulitkan dan membungkus data Sesi (masih disimpan dalam Kuki). Dengan cara ini, tidak perlu risau tentang pengguna mengubah suai data Sesi, pelayan akan mengesahkan data tersebut.

Dalam aplikasi praktikal, Kunci Pelayan yang disulitkan disimpan dalam kuki. Hanya selepas pengesahan Kunci Pelayan mempunyai hak untuk membaca dan mengubah suai data Sesi. Ini adalah Sesi pelanggan.


Sesi Pelanggan Nod

Node.JS mempunyai pustaka yang boleh melaksanakan Sesi sisi klien: node-client-session Ia boleh menggantikan sesi terbina dalam dan cookieParser middleware bagi Connect (rangka kerja middleware Node).

Penggunaan dalam aplikasi rangka kerja Express:

const clientSessions = require("client-sessions"); 
Salin selepas log masuk
app.use(clientSessions({ secret: '0GBlJZ9EKBt2Zbi2flRPvztczCewBxXK' // 设置一个随机长字符串! })
Salin selepas log masuk

Kemudian, tambahkan sifat pada objek req.session:

app.get('/login', function (req, res){ req.session.username = 'JohnDoe'; });
Salin selepas log masuk

Baca atribut:

app.get('/', function (req, res){ res.send('Welcome ' + req.session.username); });
Salin selepas log masuk

Gunakan kaedah tetapan semula untuk menamatkan Sesi:

app.get('/logout', function (req, res) { req.session.reset(); });
Salin selepas log masuk

Log keluar Sesi Persona dengan segera

(Nota: Persona ialah sistem identiti dalam talian yang dilancarkan oleh Mozzilla)

Tidak seperti Sesi sebelah pelayan, masalah dengan Sesi sebelah klien ialah pelayan tidak boleh memadamkan Sesi.

Dalam seni bina sisi pelayan, anda boleh memadamkan data Sesi. Sesi yang dikenal pasti oleh mana-mana kuki pelanggan mungkin tidak wujud. Walau bagaimanapun, dalam seni bina sisi klien, data Sesi tidak berada di sisi pelayan dan tiada jaminan bahawa data Sesi akan dipadamkan pada setiap pelanggan. Dalam erti kata lain, kami tidak boleh menyegerakkan keadaan klien pengguna (log masuk) dan keadaan pelayan (log keluar).

Untuk mengimbangi kecacatan ini, masa tamat tempoh ditambah pada Sesi pelanggan. Sahkan masa tamat tempoh sebelum mengembangkan data Sesi (disulitkan dan dibungkus). Jika ia tamat tempoh, buang data Sesi dan tukar status pengguna (seperti log keluar).

Mekanisme tamat tempoh berfungsi dengan baik dalam banyak aplikasi (terutama keperluan masa tamat tempoh yang singkat). Contohnya, dalam Persona, apabila pengguna mendapati bahawa kata laluan telah diancam atau rosak, kami perlu menyediakan kaedah untuk pengguna log keluar daripada data sesi dengan segera.

Ini bermakna menyimpan sedikit maklumat keadaan dalam bahagian belakang perkhidmatan. Cara kami mengendalikan log keluar segera adalah dengan menambahkan Token dalam jadual data pengguna dan data Sesi.


Setiap kali API dipanggil, data Token dalam Sesi dibandingkan dengan Token dalam pangkalan data. Jika tidak, kembalikan mesej ralat dan keluar dari pengguna.

Ini akan menambah operasi pangkalan data yang berlebihan untuk menanyakan Token. Nasib baik, kebanyakan panggilan API memerlukan membaca jadual data pengguna, jadi bawa sahaja Token bersamanya.


Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan