Hướng dẫn session nodejs

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 expresslogout 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 

Hướng dẫn session nodejs

còn như hình dưới này thì bạn đã có Session 

Hướng dẫn session nodejs

http://127.0.0.1:3000/set_session 

 

Hướng dẫn session nodejs

Destroy Session express js

http://127.0.0.1:3000/destroy_session  

Hướng dẫn session nodejs

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.