我对Express会话对象有一个奇怪的问题:当我使用我的应用程序(一个简单的HTML5 / JQM网站单页应用程序)作为Web应用程序(即我的页面在我的节点服务器上)时,Express的会话对象工作正常;但是,如果我尝试将我的应用程序用作HTML页面(显然将其服务指向node.js服务器应用程序),就像Cordova应用程序一样(事实上我想这样使用它)我的sessionid更改在每次上/下请求我做;这有效,我的会话总是被重新创建,我存储到会话中的变量不会通过我的应用程序持续...我需要从我当前的网站制作一个Cordova应用程序;我错过了什么?
对此事进行了大量研究,并找到了一些在我的案例中不起作用的解决方案....
我在登录时设置一个会话变量(一个简单的json对象),然后通过app的过程更新它(基本上将项添加到包含在会话中的json var中的数组);它只在我将var更新为一个特定路由时才有效;但后来我需要从另一条路线访问会话对象,我总是发现它是空的;正如我之前所说,当我将该应用程序用作Web应用程序时,这不会发生(http://localhost:3000/index.html);但是当我直接打开html文件时会发生这种情况(就像Cordova应用程序一样);希望我足够清楚
提前致谢
以下是我的一些代码摘录
代码摘录:
app.js(主节点.js服务器应用)
var app = express();
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({
extended : false
}));
app.use(favicon(__dirname + '/public/img/bluemix_logo.png'));
app.use(logger('dev'));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));
app.use(session({
'cookie': {
'httpOnly': false,
'maxAge': 1000 * 60 * 60 * 24 * 60,
},
secret: 'keyboard cat' })); //used same parameters i found on
//..............
app.use('/', index);
app.use("/installations",installations)
installations.js(/ installation path的路由)
var installBuffer=[];
router.post('/addItem', function(req, res) {
var tipo = req.body.tipo;
var aas = req.body.assignee;
var location = req.body.location;
sess=req.session;
var l=installBuffer.length;
var idx=l++;
installBuffer[idx]=req.body; //here i add an item to installBuffer
sess.installBuffer = installBuffer; //and here i put it into session
console.log("session: "+JSON.stringify(sess)); //this works ok
//at any reference to this route items are incremented correctly
res.send("additem");
});
router.post('/addItem/addInstallation', function(req, res) {
sess=req.session;
console.log("session: "+req.session); //here session is always empty
// with its default json vars cookie, httponly, etc...
res.send("addinstallation");
});
正如我之前所说,这种行为只有当我使用html5单页作为本地页面时(就像它在cordova / phonegap应用程序中一样)。 当将该页面用作Web应用程序(http://localhost/index.html)时,这根本不会发生,在此模式下它可以完美地运行
提前致谢