2013-02-13 5 views
2

너무 혼란 스럽습니다. 나는 다음과 같은 익스프레스 응용 프로그램을 만들었습니다.Node.js는 appfog의 서버를 표현합니다. android에서 Chrome을 사용할 때 페이지가 새로 고침 될 때 세션이 손실됩니다.

그런 다음 경로를 약간 수정하여 확인하고 삭제하십시오. 내 로컬 컴퓨터에서 서버를 실행하고 내가 사용하는 모든 브라우저 (Chrome, Firefox, Android Chrome, Android Dolphin)는 예상대로 작동합니다. 그러나 이것을 appfog에 업로드하자 마자 Android 용 Chrome은 페이지로드 동안 동일한 세션을 유지하지 못합니다. 여기 appfog에 내 호스팅 응용 프로그램입니다,이 스스로를 테스트 할 수 있습니다

kyle.aws.af.cm

주먹 페이지에서는 세션 VAR을 설정합니다 온. 해당 페이지에는 세션 변수가 설정되었는지 확인하고 세션을 파괴 할 수있는 링크가 있는지 확인하는 링크가 있습니다. Android 용 Chrome은 사용자가 세션을 var로 설정했다고보고하지 않습니다. 다시 말하지만 앱이 appfog에있을 때 Android 용 Chrome에서만 작동하지 않습니다. 이 응용 프로그램이 appfog에 있는지 여부에 관계없이 다른 브라우저는 아무 문제없이 작동하는 것 같습니다.

이것이 앱 버그입니까? Android 용 Chrome 버그입니까? 익스프레스 또는 연결 버그입니까? 내가 잘못하고있는 것이 있습니까?

내 코드 :

는 app.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()'}); 
}; 
+0

AppFog에서 샘플 앱을 테스트했는데 정상적으로 작동했습니다. http://sessiontest.aws.af.cm/ –

답변

3

그럼 난 AppFog으로 잘못 알고하지 않습니다, 하지만 난 애플 리케이션을 생성하고 Nodejitsu 에서이 코드를 실행하고 그것이 크롬 @ 안드로이드 4.1.2에서 작동하는지 확인할 수 있습니다 : http://testforso.jit.su/

+0

테스트 해 주셔서 감사합니다. 그것은 나를 위해 너무 작동합니다! 나는 당신에게 투표를 할 것이지만 나는 충분한 대표를 가지고 있지 않습니다. Nodejitsu로 이동할 수도 있습니다. 아마 appfog가있는 버그 일뿐입니다. : -/ –

+0

걱정하지 마라, 나는 새롭다. .. P .. 다행히 도울 수 있었다! – yawnt

2

나는 동일한 문제가 있습니다! 다른 것을 무엇을 시도해야할지 모른다. 내 응용 프로그램은 localhost에서 완벽하게 작동합니다. 하지만 AppFog에서 작동 할 때이를 배포합니다. 나는 ticket을 만들었습니다. AppFog에.

하품처럼 Nodejutsu에 내 응용 프로그램을 배포하고 완벽하게 작동합니다!

+0

티켓을 주셔서 감사합니다. –

+0

같은 문제가 있습니다. 해결할 수 있었습니까? AppFog 티켓이 사라진 것 같습니다. –

+0

더 나은 것보다 늦게 :) 나는 DB 스토리지 대신 쿠키 세션을 사용하여 내 문제를 해결했습니다. 나중에 나는 Nodejutsu로 이주했다. 나는 아무 문제도 만났지 않았다. – Alex