Vsplit
Vsplit

Reputation: 1988

Session does not work suddenly

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

Answers (1)

Alfred
Alfred

Reputation: 61803

code

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');

packages installed

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] 

System information

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"

Curl example

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

Related Questions