Nội dung bài viết
Video học lập trình mỗi ngày
Đây là một bài viết đã được viết cách đây nhiều năm. Nó được lưu trữ ở đây như một sự tò mò về lịch sử phát triển express session. Xin đừng cho rằng bất cứ điều gì ở đây vẫn chính xác hoặc đại diện cho ý kiến hiện tại của tôi. Bài viết mới được giới thiệu ở đây.
Hôm bài viết này tôi và các bạn đi tìm hiều về NodeJS Session. Và Node.JS Session sẽ được viết và demo trong Express JS. Cụ thể hơn đó chính là sử dụng Express-session một middleware trong ExpressJs. Để dễ hình dung và thực tế hơn về NodeJS Session thì tôi sẽ làm một ví dụ và sẽ upload lên github, các bạn có thể download về ở cuối bài viết. Và phần sau tôi sẽ sử dụng redis để thay thế Express-session một cách hiệu quả hơn. Còn bây giờ nhiệm vụ của các bạn là đọc bài viết sau đó chạy demo khi download tại github.
Để thay thế bài viết này, chúng tôi nâng cấp bài viết mới tại đây.
Session là gì?
Câu hỏi khá nhàm chán, nhưng cũng như các bài viết khác chúng ta cần phải giải thích lại. Session là một tập tin nhỏ được lưu trữ trên backend hay còn gọi là server. Session được dùng phổ biến trong tất cả các ngôn ngữ lập trình và hầu như trong các ứng dụng có kết nối database. Nếu như login nodejs express và logout nodejs express của mỗi ứng dụng mà không có session thì không biết sẽ làm cho dev mệt mỏi tới đâu.
Store Session in Nodejs
Có nhiều cách để lưu trữ những session trong nodejs này nhưng dưới đây tôi sẽ liệt kê những phương pháp phổ biến cũng như tôi luôn dùng đó là:
- Cookie: Chúng ta có thể store sesion trên cookie session nodejs mỗi trình duyệt nhưng chú ý rằng tất cả đều nằm ở Clients.
- Memory Cache: Như chúng ta đã biết, Cache được lưu trữ trong bộ nhớ. Chúng ta cũng có thể sử dụng thêm những cache module như Redis và Memcached.
- Database: Đương nhiên rồi, nhưng tôi nghĩ ít ai lại dùng đến database để store session.
nodejs session example
Bây giờ chúng ta đi đến nội dung chính của bài học hôm nay về NodeJS Session, đó là sử dụng Express-session một middleware trong ExpressJs để quản lý session trong express js.
Create folder nodejs-session-expressjs
AnonyStick$ mkdir nodejs-session-expressjs && cd nodejs-session-expressjs
express-session npm package.json
{ "name": "nodejs-session-expressjs", "version": "1.0.0", "description": "", "main": "index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "author": "", "license": "ISC", "dependencies": { "body-parser": "^1.19.0", "express": "^4.17.1", "express-session": "^1.17.0" } }
Create file app.js
const express = require('express'); const session = require('express-session'); const app = express(); app.use(session({ resave: true, saveUninitialized: true, secret: 'somesecret', cookie: { maxAge: 60000 }})); var server = app.listen(3000, "127.0.0.1", function () { var host = server.address().address var port = server.address().port console.log("Example app listening at http://%s:%s", host, port) }); //set session app.get('/set_session', (req, res) => { //set a object to session req.session.User = { website: 'anonystick.com', type: 'blog javascript', like: '4550' } return res.status(200).json({status: 'success'}) }) //set session app.get('/get_session', (req, res) => { //check session if(req.session.User){ return res.status(200).json({status: 'success', session: req.session.User}) } return res.status(200).json({status: 'error', session: 'No session'}) }) //destroy session app.get('/destroy_session', (req, res) => { //destroy session req.session.destroy(function(err) { return res.status(200).json({status: 'success', session: 'cannot access session here'}) }) })
Trong ví dụ này tôi lướt qua 3 chức năng chính đó là set_session()
, get_session()
, và destroy_session()
Đầu tiên các bạn download nodejs session github về rồi chạy từng bước để test và hiểu. Đừng có đọc rồi mà để đó, hơn thua nhau là ở chỗ đó.
Get Session express js
http://127.0.0.1:3000/get_session --> nếu nó trả về results như hình dưới thì chưa có session
còn như hình dưới này thì bạn đã có Session
nodejs set session
http://127.0.0.1:3000/set_session
Destroy Session express js
http://127.0.0.1:3000/destroy_session
Done()
Như vậy là chúng ta cũng đã tìm hiểu về một ví dụ về nodejs session sử dụng express session. Hy vọng các bạn đọc xong không để đó mà sẽ thực hành lại bài này. Ở bài sau tôi sẽ giúp các bạn hiểu rõ hơn về cách store session in redis.
DOWNLOAD Source: nodejs session github
Cảm ơn các bạn đã đọc.