访问外部网站时,未定义Express会话

时间:2014-06-25 19:58:35

标签: javascript node.js session express

我尝试使用快速会话来存储我网站的用户凭据信息。不幸的是,当我设法从本地计算机上运行网站时,在托管网站的每个请求期间,快速会话都是空的。

为了更容易理解:

服务器:

  • Node.JS app
  • 托管网站(纯HTML,javascript)
    • req.session总是空着

本地:

  • localhost.com可访问的本地服务器(已编辑主机以将localhost.com重定向到127.0.0.1)
    • req.session有我设置的内容

网站文件相同/同步&两者都连接到同一台服务器。

来自网站的请求是默认的ajax:

$.ajaxSetup({
    xhrFields: {
        withCredentials: true //for server-side sessions
    }
});

服务器app.js设置:

var express = require('express');
var expsession = require('express-session');
var config = require('./config');
var app = express();

app.set('port', process.env.PORT || 3333);
app.use(require('method-override')());
app.use(require('morgan')('dev'));
app.use(require('body-parser')({ keepExtensions: true}));
app.use(require('cookie-parser')());
app.use(expsession({
    secret: 'stufffandthings',
    store: new expsession.MemoryStore({reapInterval: 600000})
}));

app.use(function(req, res, next) {
    console.log('From: ' + req.get('origin'));
    if(config.origins.indexOf(req.get('origin')) > -1){ //if in list of allowed origins
        res.header("Access-Control-Allow-Origin", req.get('origin')); //allow them in
        console.log('Set access control to allow origin');
    }

    res.header('Access-Control-Allow-Methods', 'PUT, GET, POST, DELETE, OPTIONS');
    res.header('Access-Control-Allow-Headers', 'Content-Type, X-Requested-With, Authorization, Content-Length');
    res.header('Access-Control-Allow-Credentials', true);
    res.header("Cache-Control", "no-cache");
    next();
});

config.origins包含我的http://localhost.com:3700& http://hostedwebsite.com:8080。本地主机和本地网站都是允许来源的。

修改 在托管网站上,如果您不离开页面并继续执行ajax请求,会话对象会记住您。咦?

1 个答案:

答案 0 :(得分:0)

app.use(express.static(path.join(__dirname, '/public')));

必须高于快速会话中间件声明。这是快递会话模块的一个错误。