Reputation: 1988
I have a big problem with sessions.
I drive to create an application around "Redis" nodejs with different libraries as express.
But suddenly the sessions no longer works. And I do not understand why. So I reformatted my server and reinstall all properly. (I am using Debian 6)
And the basic test is still not working: (.
Here's the test:
var express = require('express');
var app = express.createServer();
var RedisStore = require('connect-redis')(express);
app.use(express.bodyParser());
app.use(express.cookieParser());
app.use(express.session({ secret: "keyboard cat", store: new RedisStore }));
app.get('/', function(req, res){
var sess = req.session;
req.session.visitCount = req.session.visitCount ? req.session.visitCount + 1 : 1;
if (sess.views) {
res.setHeader('Content-Type', 'text/html');
res.write('<p>views: ' + sess.views + '</p>');
res.write('<p>expires in: ' + (sess.cookie.maxAge / 1000) + 's<p/>');
res.write('<p>You have visited this page ' + req.session.visitCount + ' times</p>');
res.end();
sess.views++;
} else {
sess.views = 1;
res.end('welcome to the session demo. refresh!');
}
});
app.listen(4000);
the program runs correctly (no error). but when I use the "sess.views" is never valid
so I always see : welcome to the session demo. refresh!
I am a bit desperate.
Thank you in advance for your help
Upvotes: 2
Views: 1284
Reputation: 61803
I believe sess.views++
needs to be called before res.end()
just like TJ's example
var express = require('express');
var app = express.createServer();
var RedisStore = require('connect-redis')(express);
app.use(express.bodyParser());
app.use(express.cookieParser());
app.use(express.session({ secret: "keyboard cat", store: new RedisStore }));
app.get('/', function(req, res){
var sess = req.session;
req.session.visitCount = req.session.visitCount ? req.session.visitCount + 1 : 1;
if (sess.views) {
res.setHeader('Content-Type', 'text/html');
res.write('<p>views: ' + sess.views + '</p>');
res.write('<p>expires in: ' + (sess.cookie.maxAge / 1000) + 's<p/>');
res.write('<p>You have visited this page ' + req.session.visitCount + ' times</p>');
sess.views++;
res.end();
} else {
sess.views = 1;
res.end('welcome to the session demo. refresh!');
}
});
app.listen(4000, '127.0.0.1');
alfred@alfred-laptop:~/database/redis-2.2.0-rc4/src$ npm ls
/home/alfred
├── [email protected]
├─┬ [email protected]
│ ├─┬ [email protected]
│ │ ├── [email protected] extraneous
│ │ ├── [email protected]
│ │ └── [email protected]
│ ├── [email protected]
│ ├── [email protected]
│ ├── [email protected]
│ └─┬ [email protected]
│ └── [email protected]
├─┬ [email protected]
│ ├─┬ [email protected]
│ │ ├── [email protected] extraneous
│ │ ├── [email protected]
│ │ └── [email protected]
│ ├── [email protected]
│ └── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├─┬ [email protected]
│ └── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├─┬ [email protected]
│ └── [email protected]
├── [email protected]
├── [email protected]
└─┬ [email protected]
├── [email protected]
├── [email protected]
└── [email protected]
alfred@alfred-laptop:~/database/redis-2.2.0-rc4/src$ npm -v
1.0.15
alfred@alfred-laptop:~/database/redis-2.2.0-rc4/src$ node -v
v0.4.9
alfred@alfred-laptop:~/database/redis-2.2.0-rc4/src$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=10.10
DISTRIB_CODENAME=maverick
DISTRIB_DESCRIPTION="Ubuntu 10.10"
alfred@alfred-laptop:~/node/stackoverflow/6700472$ curl -c cookie http://localhost:4000/
welcome to the session demo. refresh!alfred@alfred-laptop:~/node/stackoverflow/6700472$ curl -b cookie http://localhost:4000/
<p>views: 1</p><p>expires in: 14396.223s<p/><p>You have visited this page 2 times</p>alfred@alfred-laptop:~/node/stackoverflow/6700472$ curl -b cookie http://localhost:4000/
<p>views: 2</p><p>expires in: 14399.221s<p/><p>You have visited this page 3 times</p>alfred@alfred-laptop:~/node/stackoverflow/6700472$
Works just fine!
Upvotes: 5