Home Kiến thức Dùng session trong nodejs bằng module express-session

Dùng session trong nodejs bằng module express-session

7 min read
1
10,315

Nếu lập trình web bằng các ngôn ngữ như Java/php/dotNet chắc các bạn không lạ với khái niệm session. Đây là một công cụ vô cùng tiện dụng để định danh khác hàng để biết khách hàng này đã đăng nhập chưa, ID là gì. Hoặc để lưu thông tin giỏ hàng của khách hàng nào đó xem họ đã bỏ bao nhiêu món hàng vào shopping cart.

Bản chất session là lưu một cookie có chuỗi ngẫu nhiên (được hash) ở client, phía server nó sẽ lưu một DB riêng với key là giá trị cookie ở client. Nhờ vậy, nó định danh được từng client và biết những session nào thuộc client nào. Session-cookie buộc phải đi chung với nhau và hiện nay chưa có cơ chế hiệu quả hơn để xử lý.

Ở các hệ thống khác, session được cung cấp như một phần của ngôn ngữ, bạn chỉ việc gọi hàm hoặc đối tượng ra là dùng.

Nodejs là ngôn ngữ bất đồng bộ, bản thân nó không cung cấp các phương thức set/get session như những ngôn ngữ khác. Mặc dù nó có cung cấp cơ chế lấy cookie trong module http nhưng việc truy xuất cũng vô cùng nhiêu khê.

May thay, có một module giúp bạn làm việc này là express-session. Cơ chế của nó không khác những hệ thống khác, vẫn là dùng một cookie ở client để đánh dấu ID client, và data session được lưu tại server. Để dùng module express-session bạn chỉ cần load module này về bằng câu lệnh

npm install express-session
var session = require(express-session)

Sau đó chỉ việc gắn nó vào hệ thống

var app = express()
app.set(‘trust proxy’, 1) // trust first proxy
         app.use(session({
         secret: ‘keyboard cat’,
         resave: false,
         saveUninitialized: true,
         cookie: { secure: true }
}))

Có một điểm bất tiện, default của nó là lưu thông tin session trong memory. Điều này có nghĩ là nếu bạn phải restart lại node thì coi như  . . . mất hế. Trong quá trình debug hoặc develop thì không nói làm gì, chứ giai đoạn production mà như vậy thì không chấp nhận được.

Để khác phục điều này, ta có thể cho lưu các giá trị session vào database, vừa an toàn khi lưu trữ, vừa tiện việc đồng bộ dữ liệuvà nhiều cái tiện lợi khác. Có nhiều module  để lưu session value vào các database system khác nhau như MongoDB, PostgreSQL, MySQL, MariaDB, SQLite3, Oracle . . . (xem thêm tại https://github.com/expressjs/session#compatible-session-stores )

VD nếu bạn đinh lưu giá trị session vào file, có thể dùng package : [session-file-store]

var session = require(‘express-session’);
var FileStore = require(‘session-file-store’)(session);

app.use(session({
       store: new FileStore(options),
       secret: ‘keyboard cat’
}));

Rất đơn giản phải không các bạn.

Tùy tình hình bạn có thể chọn store session ở đâu, hy vọng bài viết này giúp bạn có cái nhìn tổng quan về sission trong nodejs. Và hãy nhớ: cái gì ngôn ngữ khác làm được thì nodejs cũng làm được !

Load More Related Articles
Load More By quangvu
Load More In Kiến thức

Check Also

Tự làm web chatGPT đơn giản cho phép dùng nhiều OpenAI key

Trong thời đại công nghệ phát triển như hiện nay, chatbot đang dần trở thành một giải pháp…