Tôi đang cố gắng triển khai lưu trữ phiên cho ứng dụng Nút express.js. Câu hỏi của tôi là:
- Cách xóa cookie theo vòng đời phiên trình duyệt (được đánh dấu hết hạn = false theo tài liệu kết nối)
- Tôi nên lưu trữ dữ liệu phiên dưới dạng chuỗi json hay trực tiếp dưới dạng đối tượng?
Đây là những gì tôi đã nghĩ ra cho đến nay với CoffeeScript, sử dụng Mongoose vì đó là orm tôi đã chọn cho ứng dụng
thể hiện = yêu cầu 'thể hiện'
cầy mangut = yêu cầu "cầy mangut"
util = yêu cầu "util"
# xác định lược đồ phiên
SessionSchema = mongoose mới.Schema
sid : { loại: Chuỗi, bắt buộc: đúng, duy nhất: đúng }
dữ liệu: { loại: Chuỗi, mặc định: '{}' }
hết hạn: { type: Ngày, chỉ mục: true }
module.exports =
lớp SessionStore mở rộng express.session.Store
hàm tạo: (tùy chọn) ->
console.log "tạo cửa hàng phiên mới"
tùy chọn ?= {}
# khoảng thời gian làm mới
tùy chọn.interval ?= 60000
options.url ?= "mongodb://localhost/session"
# tạo kết nối phiên chuyên dụng
kết nối = mongoose.createConnection options.url
# tạo mô hình phiên
@Session = Connection.model 'Phiên', SessionSchema
# xóa phiên hết hạn sau mỗi chu kỳ
RemoveExpires = => @Session.remove hết hạn: { '$lte': new Date() }
setInterval loại bỏHết hạn, tùy chọn.interval
nhận được: (sid, fn) ->
@Session.findOne sid: sid, (err, session) ->
nếu phiên?
thử
fn null, JSON.parse session.data
bắt lỗi
lỗi lầm
khác
fn err, phiên
đặt: (sid, dữ liệu, fn) ->
bác sĩ =
sid: sid
dữ liệu: dữ liệu JSON.stringify
hết hạn: data.cookie.expires
thử
@Session.update sid: sid, doc, upsert: true, fn
bắt lỗi
lỗi lầm
hủy: (sid, fn) ->
@Session.remove { sid: sid }, fn
tất cả: (fn) ->
@Session.find { hết hạn: { '$gte': new Date() } }, [ 'sid' ], (err, phiên) ->
nếu phiên?
fn null, (session.sid cho phiên trong phiên)
khác
lỗi lầm
rõ ràng: (fn) -> @Session.drop fn
độ dài: (fn) -> @Session.count {}, fn
Tôi khá mới với Node, vì vậy hãy cân nhắc điều này.
Mặc dù nó không được định hướng trực tiếp đến phiên Hướng dẫn nhớ tôi trên dailyjsTôi nghĩ nó sẽ giúp ích một chút. Đặc biệt là đoạn mã cuối cùng nơi anh ấy xác minh mã thông báo đăng nhập.
Ngoài ra, tôi nghĩ sẽ tốt hơn nếu phân tích cú pháp JSON và lưu trữ nó dưới dạng đối tượng. Việc truy cập các bit cookie khác nhau theo cách này sẽ dễ dàng hơn nếu bạn thực hiện phân tích cú pháp trước.
Tôi là một lập trình viên xuất sắc, rất giỏi!