2012-08-23 2 views
1

Sinatra을 사용하는 간단한 Facebook Canvas 스타일 앱을 만들고 있습니다.Heroku에서 Sinatra로 만든 Facebook 앱을 호스팅하는 세션을 통합하는 방법

내 응용 프로그램은 내 컴퓨터에서 로컬로 실행할 때 잘 작동합니다. 하지만 Heroku까지 밀어 넣을 때 세션이 일치하지 않는 문제가 발생하므로 페이지를 다시로드 할 때/콜백으로 세션에 배치 된 데이터가 존재하지 않습니다.

문제는 Heroku에서 실행할 때, 그것은 어떤 공상로드 밸런싱을 삽입 한 것 같다 그래서 request.env['REMOTE_HOST'] 페이지를 다시로드하고, 사용자의 ID가 세션에 저장되어있는 페이스 북 callback 사이에 차이가있다.

일부 (수정 된) 로깅에서이를 명확하게 보여줍니다. Heroku가에

은 (이 작품 동일한 호스트와 일치하는 세션 ID에주의) 로컬

X9.1XX.XX1.XX - - [23/Aug/2012 03:27:42] "POST/HTTP/1.1" 200 1878 0.0235 
DEBUG -- : --------------------------------------------------------- 
DEBUG -- : --------------------------------------------------------- 
DEBUG -- : Handling request from host ip-10-92-97-233.ec2.internal 
DEBUG -- : Session ID: 39960b607fd7c1150791d4d42d6633b3b2a5b18e79e742f67d8f677f139dbca8 
DEBUG -- : --------------------------------------------------------- 
DEBUG -- : Set session['oauth'] : Koala::Facebook::OAuth 
DEBUG -- : Session id: 39960b607fd7c1150791d4d42d6633b3b2a5b18e79e742f67d8f677f139dbca8 
DEBUG -- : --------------------------------------------------------- 
DEBUG -- : Session ID: 39960b607fd7c1150791d4d42d6633b3b2a5b18e79e742f67d8f677f139dbca8 
DEBUG -- : Completed request from host ip-10-92-97-233.ec2.internal 
DEBUG -- : --------------------------------------------------------- 
DEBUG -- : --------------------------------------------------------- 

X9.1XX.XX1.XX - - [23/Aug/2012 03:27:46] "GET /login HTTP/1.1" 302 - 0.0178 
DEBUG -- : --------------------------------------------------------- 
DEBUG -- : --------------------------------------------------------- 
DEBUG -- : Handling request from host ip-10-94-82-253.ec2.internal 
DEBUG -- : Session ID: 20200e42add5ec9bfe12b225502c7449dda6e8ab06dd3fbe204239db0e21de89 
DEBUG -- : --------------------------------------------------------- 
ERROR -- : Could not find oauth key in session 20200e42add5ec9bfe12b225502c7449dda6e8ab06dd3fbe204239db0e21de89 
DEBUG -- : --------------------------------------------------------- 
DEBUG -- : Session ID: 20200e42add5ec9bfe12b225502c7449dda6e8ab06dd3fbe204239db0e21de89 
DEBUG -- : Completed request from host ip-10-94-82-253.ec2.internal 
DEBUG -- : --------------------------------------------------------- 
DEBUG -- : --------------------------------------------------------- 

X9.1XX.XX1.XX - - [23/Aug/2012 03:27:48] "GET /callback?code=AQCs… …vxkEI76cq32juk HTTP/1.1" 302 - 0.0014 
DEBUG -- : --------------------------------------------------------- 
DEBUG -- : --------------------------------------------------------- 
DEBUG -- : Handling request from host ip-10-125-37-231.ec2.internal 
DEBUG -- : Session ID: a94f5f36b44e5891657982248d1304e265f9619bdcdc37b648879e5a12a0fe5b 
DEBUG -- : --------------------------------------------------------- 
DEBUG -- : --------------------------------------------------------- 
DEBUG -- : Session ID: a94f5f36b44e5891657982248d1304e265f9619bdcdc37b648879e5a12a0fe5b 
DEBUG -- : Completed request from host ip-10-125-37-231.ec2.internal 
DEBUG -- : --------------------------------------------------------- 
DEBUG -- : --------------------------------------------------------- 

(다른 원격 호스트 따라서 다른 세션 ID를 주)

X9.1XX.XX1.XX - - [23/Aug/2012 13:56:22] "POST/HTTP/1.1" 200 1878 0.0279 
DEBUG -- : --------------------------------------------------------- 
DEBUG -- : --------------------------------------------------------- 
DEBUG -- : Handling request from host ppp12345.static.someprovider.net 
DEBUG -- : Session ID: 892e6ec515afde6f463102f83d373523bba62b26180a2e5a34a4945c787eacfd 
DEBUG -- : --------------------------------------------------------- 
DEBUG -- : Set session['oauth'] : Koala::Facebook::OAuth 
DEBUG -- : Session id: 892e6ec515afde6f463102f83d373523bba62b26180a2e5a34a4945c787eacfd 
DEBUG -- : --------------------------------------------------------- 
DEBUG -- : Session ID: 892e6ec515afde6f463102f83d373523bba62b26180a2e5a34a4945c787eacfd 
DEBUG -- : Completed request from host ppp12345.static.someprovider.net 
DEBUG -- : --------------------------------------------------------- 
DEBUG -- : --------------------------------------------------------- 

X9.1XX.XX1.XX - - [23/Aug/2012 13:56:31] "GET /login HTTP/1.1" 302 - 0.0079 
DEBUG -- : --------------------------------------------------------- 
DEBUG -- : --------------------------------------------------------- 
DEBUG -- : Handling request from host ppp12345.static.someprovider.net 
DEBUG -- : Session ID: 892e6ec515afde6f463102f83d373523bba62b26180a2e5a34a4945c787eacfd 
DEBUG -- : --------------------------------------------------------- 
DEBUG -- : --------------------------------------------------------- 
DEBUG -- : Session ID: 892e6ec515afde6f463102f83d373523bba62b26180a2e5a34a4945c787eacfd 
DEBUG -- : Completed request from host ppp12345.static.someprovider.net 
DEBUG -- : --------------------------------------------------------- 
DEBUG -- : --------------------------------------------------------- 

X9.1XX.XX1.XX - - [23/Aug/2012 13:56:34] "GET /callback?code=AQCs… …vxkEshwXTPMC8lnaY9FU HTTP/1.1" 302 - 1.4674 
DEBUG -- : --------------------------------------------------------- 
DEBUG -- : --------------------------------------------------------- 
DEBUG -- : Handling request from host ppp12345.static.someprovider.net 
DEBUG -- : Session ID: 892e6ec515afde6f463102f83d373523bba62b26180a2e5a34a4945c787eacfd 
DEBUG -- : --------------------------------------------------------- 
DEBUG -- : {"username"=>"davesag", "verified"=>true, "updated_time"=>"2012-08-20T23:41:41+0000"} 
DEBUG -- : --------------------------------------------------------- 
DEBUG -- : Session ID: 892e6ec515afde6f463102f83d373523bba62b26180a2e5a34a4945c787eacfd 
DEBUG -- : Completed request from host ppp12345.static.someprovider.net 
DEBUG -- : --------------------------------------------------------- 
DEBUG -- : --------------------------------------------------------- 

그래서 질문입니다 Heroku가 세션을 통합하여 쿠키가 올바르게 이동하고 일치하는지 어떻게 알 수 있습니까?

답변

0

REMOTE_HOST 기반의 디스패치 대신 세션 ID를 저장하려면 세션 쿠키를 사용해야합니다. REMOTE_HOST는 당신이 본 것처럼 heroku의 라우팅에 따라 다르지만, 여러 사람이 동일한 아웃 바운드 IP 주소를 사용하는 경우에도 다릅니다.

+0

세션을 사용하고 있지만 문제는 영웅이 동일한 세션을 반환하지 않아 세션에 저장 한 모든 항목이 손실된다는 것입니다. –

관련 문제