Node Express会话不会持久化

时间:2015-04-08 08:50:38

标签: node.js html5 cordova session express

我对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)时,这根本不会发生,在此模式下它可以完美地运行

提前致谢

0 个答案:

没有答案