Dalam Node.js, kami biasanya menggunakan pakej sesi ekspres untuk menggunakan dan mengurus sesi serta menyimpan keadaan sesi antara pelayan dan penyemak imbas klien. Jadi bagaimana kita boleh mencapai masa tamat sesi apabila pengguna menyegarkan halaman semasa atau mengklik butang pada halaman? Sama seperti keadaan sesi dalam ASP.NET, selagi halaman kekal aktif untuk tempoh masa tertentu, sesi tidak akan tamat tempoh. Fungsi ini boleh dicapai melalui kod berikut Kami menambah perisian tengah berikut pada kod Node.js:
// use this middleware to reset cookie expiration time // when user hit page every time app.use(function(req, res, next){ req.session._garbage = Date(); req.session.touch(); next(); });
Dengan cara ini, setiap kali permintaan masuk, perisian tengah akan mengubah suai semula masa tamat tempoh sesi untuk mencapai kesan yang diingini.
Kemudian, tambahkan penggunaan sesi pada kod:
app.use(session({ secret: 'test', resave: false, saveUninitialized: true, cookie:{ maxAge: 1000*60*60 // default session expiration is set to 1 hour }, store: new MemcachedStore({ hosts: ['127.0.0.1:9000'], prefix: 'test_' }) }));
Sesi di atas menggunakan memcached sebagai kaedah storan sesi Untuk cara menggunakan memcached, anda boleh rujuk alamat ini di Github https://github.com/balor/connect-memcached
Sudah tentu, anda juga boleh menggunakan kaedah storan sesi lain, seperti memoryStore, redis, mongoDB, dsb., dan kaedah penggunaannya adalah serupa.
Biar saya bercakap tentang beberapa kaedah storan sesi Node.js
Stor sesi Node.js mempunyai empat kaedah pilihan untuk ujian prestasi seperti berikut:
Concurrency: 1 none 4484.86 [#/sec] memory 2144.15 [#/sec] redis 1891.96 [#/sec] mongo 710.85 [#/sec] Concurrency: 10 none 5737.21 [#/sec] memory 3336.45 [#/sec] redis 3164.84 [#/sec] mongo 1783.65 [#/sec] Concurrency: 100 none 5500.41 [#/sec] memory 3274.33 [#/sec] redis 3269.49 [#/sec] mongo 2416.72 [#/sec] Concurrency: 500 none 5008.14 [#/sec] memory 3137.93 [#/sec] redis 3122.37 [#/sec] mongo 2258.21 [#/sec]
Perbandingan menunjukkan bahawa storan redis mempunyai prestasi unggul apabila terdapat lebih banyak kesesuaian.
Laman yang digunakan sesi adalah halaman yang sangat mudah;
app.get("/", function(req,res){ if ( req.session && req.session.user_id){ req.session.no = req.session.user_id; } else { throw Error('error'); } res.send("No: " + req.session.no);});
Konfigurasi kedai Redis:
app.use(express.session({ store: new RedisStore({ host: 'localhost', port: 6379, db: 2, }), secret: 'hello'}));
Konfigurasi kedai Mongo:
app.use(express.cookieParser());app.use(express.session({ store: new MongoStore({ url: 'mongodb://localhost/test-session' }), secret: 'hello'}));
Jangan lupa untuk memuatkan modul apabila menggunakan storan mongodb: connect-mongo