我感到很困惑。我做了一个这样的快递应用程序:
$ express -s -e sessionTest
然后我稍微编辑了路线以设置会话变量,检查并删除它。我在本地机器上运行服务器,我使用的任何浏览器(Chrome、Firefox、Android Chrome、Android Dolphin)都按预期工作。但是,一旦我将其上传到 appfog,Android 上的 Chrome 就无法在页面加载时保持相同的会话。你可以自己测试一下,这是我在 appfog 上托管的应用程序:
您来到的第一页将设置一个会话变量。该页面上有一个链接可以检查会话变量是否已设置,另一个链接可以销毁您的会话。Android 版 Chrome 永远不会报告您已设置会话变量。同样,当我的应用程序在 appfog 上时,这仅不适用于 Android 版 Chrome。无论此应用程序是否在 appfog 上,任何其他浏览器似乎都可以正常工作。
这是一个appfog错误吗?这是 Android 版 Chrome 的错误吗?这是快递还是连接错误?还是我做错了什么?
我的代码:
应用程序.js
var express = require('express')
, routes = require('./routes')
, http = require('http')
, path = require('path');
var app = express();
app.configure(function(){
app.set('port', process.env.VMC_APP_PORT || process.env.PORT || 1337);
app.set('views', __dirname + '/views');
app.set('view engine', 'ejs');
app.use(express.favicon());
app.use(express.logger('dev'));
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(express.cookieParser('secret'));
app.use(express.session());
app.use(app.router);
app.use(express.static(path.join(__dirname, 'public')));
});
app.configure('development', function(){
app.use(express.errorHandler());
});
app.get('/', routes.index);
app.get('/session', routes.session);
app.get('/destroy', routes.kill);
http.createServer(app).listen(app.get('port'), function(){
console.log("Express server listening on port " + app.get('port'));
});
./routes/index.js
exports.index = function(req, res){
req.session.test = 1;
res.render('index', { title: 'I set the session var test to 1' });
};
exports.session = function(req, res){
if(req.session.test === 1) {
res.render('index', {title: 'the session var test is 1! :)'});
} else {
res.render('index', {title: 'the session var test is not 1!!!!!! >:('});
}
};
exports.kill = function(req, res){
req.session.destroy();
res.render('index', {title: 'I called session.destroy()'});
};