在快速应用程序中的默认connect.sid浏览器cookie上设置域

时间:2014-06-16 10:48:54

标签: node.js mongodb express session-cookies

好的,所以我有一个基于子域运行的express / mongo应用程序。我已经读过,通过将Cookie的域名设置为.mydomain.com,可以将子域名Cookie用于子域名。

这应该有效,但我无法弄清楚如何将该属性转换为默认的浏览器cookie(connect.sid)。

我使用快速会话进行会话,使用connect-mongo来持久化会话,当然还有cookie-parser使这一切都能正常运行。

似乎有几个不同的地方我可以设置此属性,但它们似乎都没有对我在Chrome的开发工具中看到的实际cookie产生任何影响。 :(

这是应用配置块:

app.use(bodyParser());
app.use(methodOverride());
app.use(cookieParser('judy_has_cooties', { domain: '.' + app.settings.domainToUse })); 
app.use(express.static(__dirname + '/app'));
app.use(function(req, res, next) {
    res.header('Access-Control-Allow-Credentials', true);
    res.header('Access-Control-Allow-Origin', '*');
    res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE');
    res.header('Access-Control-Allow-Headers', 'X-Requested-With, X-HTTP-Method-Override, Content-Type, Accept');
    next();
});   
app.use(session({
    secret: app.config.secret,
    cookie: { 
        domain: '.' + app.settings.domainToUse, 
        path: '/', 
        httpOnly: true, 
        secure: false, 
        maxAge: null 
    },
    store: new MongoStore({url: app.config.db }, function(err){
        console.log('session store is up.');
    })
}));
app.use(subdomain({ 
    base : app.settings.domainToUse + '', 
    removeWWW : true 
}));
//app.use(morgan());
app.set('port', process.env.PORT || 3000);
app.engine('html', require('ejs').renderFile);
app.set('views', __dirname + '/app/views');
app.set('view engine', 'html');
app.server = require('http').createServer(app);

mongoose.connect(app.config.db);

require('./config/configure-routes')();

// Start server
app.server.listen(app.get('port'), function(){
    console.log(">>>>> Node server is listening on port " + app.get('port'));
});

在我登录之前,我没有在浏览器中获取connect.sid cookie,所以我认为在调用sessionStore.set()时它已经完成了。我不清楚的是设置实际的浏览器cookie是什么。当我从某些路由auth中间件注销req.session对象时,我看到了所有正确的设置,但实际的浏览器cookie并没有反映这些设置。

我认为会话cookie实际上只是在服务器上的会话存储中而不是在浏览器中吗?而connect.sid只是一个查找这些cookie的句柄?

如果是这样,我如何向浏览器cookie添加更多数据以使其在子域之间保留?

感谢并抱歉可能无法理解会话和Cookie如何协同工作。

1 个答案:

答案 0 :(得分:1)

啊!好的,我真的希望这对某人有所帮助,因为我在墙上撞了两天我的脑袋。

所以,显然这不是与节点或我的服务器配置有关的问题。这纯粹是一个cookie问题。

Cookies似乎对于他们在domain =字段中收到的模式非常抱怨。如果某些东西不是1000%正确,那么它将会barf,而根本就不会设置cookie。

端口号如:3000的域将无法使用,l​​ocalhost将无法使用.localhost格式启用子域。它需要一个。域名中的某些地方才有效。

要在本地执行此操作,我必须进入我的本地DNS设置并设置.dev网址以重定向到localhost。痛苦的屁股!如果您使用OSX,这里有一个很棒的链接。

http://clintberry.com/2011/wildcard-sub-domains-on-osx-web-development-on-localhost/

一旦设置完毕,它就会像流氓一样工作!

祝你好运padewan。