1

我无法理解使用 expressjs 会话的代码有什么问题。

我正在设置req.session.is_logged = true一条路线/login,然后按 F5 调用该路线/session,其值为req.session.is_loggedfalse。

这是一些代码

var express = require("express");
var app = express();

app.configure(function(){
    app.use(express.bodyParser());
    app.use(express.cookieParser());
    app.use(express.session({secret: 'test', store: express.session.MemoryStore({
        reapInterval: 60000 * 10
    })}));
});

app.get('/session', function(req, res){
        if (req.session.is_logged){
            console.log('|-->Session recognized');
            res.status(200);
            res.send({ response: "OK" });
        }else{
            console.log('|-->Any session recognized');
            res.status(403);
            res.send({ response: "KO" })
        };
});

app.get('/login', function(req, res){
    req.session.is_logged = true;
    res.status(200);
    res.send({ response: "OK" });       
});

app.listen(3000);

我看到了一些类似的方法,它似乎有效......感谢您的帮助!

快递 v3.0.5

4

3 回答 3

1

你可能不尊重同源策略,会话系统不支持 CORS。

您的代码没有错,但是如果您访问 URLmydomain.com并到达您的节点服务器,mydomain.com:3000它就无法工作。

有很多方法可以使它工作(Apache 代理反向,NGINX ......),进行一些研究并采取最适合您的情况。

于 2013-01-06T07:09:08.350 回答
0

你在 /login 路由上设置 req.session.is_logged = false 那么它怎么可能是真的..

使用内存存储进行会话的更好方法是

var MemoryStore = express.session.MemoryStore
,store = new MemoryStore();
app.use(express.session({ secret: 'something', store: store }));
于 2012-12-30T15:52:29.093 回答
0

问题是您没有使用登录路由发送响应,因此客户端不知道设置 cookie。解决方法是简单地发送任何响应:

app.get('/login', function(req, res){
    req.session.is_logged = true;            
    res.send('Ok!'); /* Now the 'Set-Cookie' HTTP header will be sent to the client. */
});

并确保您将MemoryStore对象正确引用为属性,express.session因为它不是全局对象:

app.use(express.session({secret: 'test', store: express.session.MemoryStore({
    reapInterval: 60000 * 10
})}));
于 2012-12-31T01:52:44.760 回答