我尝试使用快速会话来存储我网站的用户凭据信息。不幸的是,当我设法从本地计算机上运行网站时,在托管网站的每个请求期间,快速会话都是空的。
为了更容易理解:
服务器:
本地:
网站文件相同/同步&两者都连接到同一台服务器。
来自网站的请求是默认的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请求,会话对象会记住您。咦?
答案 0 :(得分:0)
app.use(express.static(path.join(__dirname, '/public')));
必须高于快速会话中间件声明。这是快递会话模块的一个错误。