Tôi (gần như) đã sử dụng thành công Node.js với Express và Redis để xử lý các phiên.Node.js - Phiên không tồn tại qua res.redirect()
Sự cố tôi gặp phải là phiên không được lưu giữ khi tôi sử dụng res.redirect()
.
Dưới đây là làm thế nào tôi có thể nhìn thấy nó:
req.session.username = username.toString();
console.log(req.session);
res.redirect('/home');
Các console.log() in:
{ lastAccess: 1322579131762,
cookie:
{ path: '/',
httpOnly: true,
_expires: Tue, 29 Nov 2011 15:06:31 GMT,
originalMaxAge: 60000 },
username: 'admin' }
Bây giờ, đây là đoạn mã sau:
app.get('/home', [app.requireLogin], function(req, res, next) {
// Not showing the rest as it's not even getting there
// Instead, here is what's interesting
app.requireLogin = function(req, res, next) {
console.log(req.session);
này console.log() in ra điều này:
{ lastAccess: 1322579131775,
cookie:
{ path: '/',
httpOnly: true,
_expires: Tue, 29 Nov 2011 15:06:31 GMT,
originalMaxAge: 60000 } }
Rõ ràng, đối tượng 'tên người dùng' đã biến mất. Phiên này đã không giữ nó, và chỉ xây dựng lại một phiên mới.
Tôi làm cách nào để giải quyết vấn đề này? Đừng ngần ngại nếu bạn cần bất kỳ thông tin nào.
Đây là mã nơi tôi đặt quản lý phiên:
app.configure(function() {
// Defines the view folder and engine used.
this.set('views', path.join(__dirname, 'views'));
this.set('view engine', 'ejs');
// Allow parsing form data
this.use(express.bodyParser());
// Allow parsing cookies from request headers
this.use(express.cookieParser());
// Session management
this.use(express.session({
// Private crypting key
secret: 'keyboard cat',
store: new RedisStore,
cookie: {
maxAge: 60000
}
}));
this.use(app.router);
});
Dưới đây là toàn bộ dự án (Ý tôi là, các bộ phận của nó), về ý chính: https://gist.github.com/c8ed0f2cc858942c4c3b (bỏ qua các thuộc tính của các quan điểm render)
Bạn cũng có thể dán mã nơi bạn đang bao gồm cửa hàng phiên Redis không? Có một tùy chọn thời gian chờ ở đó, có thể bạn vô tình đặt nó quá thấp. – alessioalex
Added :) Nó được đặt ở 60 giây, và tôi rõ ràng không sử dụng 60 giây để viết thông tin đăng nhập ... –
Tôi cho rằng đây là một dự án nhỏ, tôi nghĩ tốt hơn nên đăng nó ở đâu đó (gist, pastie) và cung cấp đường dẫn. Tôi đặt cược lỗi là bằng cách nào đó trong một mã mà bạn không dán. (chỉ cần đoán) – alessioalex