2011-02-13 21 views
1

現在、私はsinatraウェブサーバのためにenable:sessionsを使用しています。しかし、私はメモリベースのセッション管理に移行する必要がありますラックセッションのリセット/有効期限

私はRack :: Session :: Poolを使用すると、セッションがページのリロード時に期限切れになっているように見えますが、新しいAjax呼び出しであっても実行されます。

答えて

2

Passengerまたは他のウェブサーバーのいずれかを使用している場合は、新しいスレッドが作成されるためです。あなたのページにすぐにリロードすると、新しいスレッドが作成されているセッションが期限切れになることがあります(特定のWebサーバースレッドのメモリにあります)。

ゆっくりとページをリロードすると、同じWebサーバースレッド上に存在します。

+0

ああ、私は参照してください。私の問題は、私のアプリが非常に怒っているので、私は同時に呼び出しを実行することです。 方法はありますか、これを管理できますか? –

+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

NickはPassengerがもたらす光の問題については正しいです。

Redisは素晴らしいインメモリソリューションです。それは信じられないほど軽量です。詳細はhttp://redis.io/をご覧ください。

私はRack::SessionのRedisアダプタを使用します。

あなたはここでそれについての詳細を見つけることができます:それは非常に簡単ですhttp://redis-store.org/redis-rack/

。あなたのGemfileにgem redis-rackを含めて、これをあなたのsinatraアプリに含めてください。

require 'redis-rack' 
disable :sessions 
use Rack::Session::Redis