2011-02-13 8 views
1

현재 나는 sinatra 웹 서버에 대해 enable : sessions를 사용하고 있습니다. 하지만 메모리 기반 세션 관리로 전환해야합니다.랙 세션 재설정/만료

Rack :: Session :: Pool을 사용하면 내 세션이 페이지가 다시로드되거나 새 Ajax 호출이 만료 된 것처럼 보이지만 실행됩니다.

답변

2

승객이나 다른 웹 서버 중 하나를 사용하는 경우 새 스레드가 만들어지기 때문입니다. 페이지를 빨리 재로드하면 새 스레드가 생성 될 때 세션이 만료 될 수 있습니다 (특정 웹 서버 스레드의 메모리에 있음).

페이지를 천천히 다시로드하면 세션이 만료되지 않습니다. 같은 웹 서버 스레드에서.

+0

아하. 저를위한 문제점은 나의 app가 높게 ajaxed다는 것을이다, 그러므로 나는 동시에 달리는 외침이있을 것이다. 방법이 있습니까, 이것을 관리 할 수 ​​있습니까? –

+0

당신은 Rack :: Session : Cookie 또는 Rack :: Session : Memcache를 사용할 수 있습니다. 아직 완전히 테스트되지 않았습니다. (어떤 이유로 그들을 구현하는 데 어려움을 겪고 있습니다) - 또는 세션 저장소에 데이터베이스 테이블을 사용하십시오. – nictrix

+0

Prakash, 내 솔루션을 보려면 여기를 방문하십시오 : http://stackoverflow.com/questions/5175854/rack-session-cookie-and-sinatra-setting-and-accessing-data – nictrix

1

닉은 승객이 가져 오는 스레딩 문제에 대해 정확합니다.

Redis는 훌륭한 메모리 내 솔루션입니다. 엄청나게 가볍습니다. 자세한 내용은 http://redis.io/에서 확인할 수 있습니다.

Rack::Session에는 Redis 어댑터를 사용합니다.

당신은 여기에 대한 자세한 내용을 찾을 수 있습니다 : 그것은 꽤 쉽게 http://redis-store.org/redis-rack/

. 그냥 gem redis-rack을 Gemfile에 포함 시켜서 sinatra app에 넣으십시오.

require 'redis-rack' 
disable :sessions 
use Rack::Session::Redis 
관련 문제