2011-02-13 3 views
1

Actuellement, j'utilise enable: sessions pour mon serveur web sinatra. Mais je dois passer à une gestion de session basée sur la mémoireréinitialisation/expiration de la session en rack

Lorsque j'utilise Rack :: Session :: Pool, il s'exécute bien que ma session semble expirer lors du rechargement de la page, ou même lors d'un nouvel appel Ajax.

Répondre

2

Si vous utilisez Passenger ou l'un des autres serveurs Web, c'est parce qu'un nouveau thread est créé. Si vous rechargez rapidement sur votre page, vous aurez probablement des sessions expirées avec un nouveau thread en cours de création (il est en mémoire sur un thread spécifique du serveur web)

Si vous rechargez lentement votre page, elle ne devrait pas expirer sur le même thread de serveur Web.

+0

Ah je vois. Le problème pour moi est que mon application est fortement ajaxée, donc j'aurai des appels fonctionnant simultanément. Y at-il un moyen, je peux gérer cela? –

+0

Vous pouvez utiliser Rack :: Session: Cookie ou Rack :: Session: Memcache, je ne les ai pas encore testés complètement (j'ai du mal à les implémenter pour une raison quelconque) - ou utiliser une table de base de données pour le magasin de sessions – nictrix

+0

Prakash, s'il vous plaît allez ici pour voir ma solution: http://stackoverflow.com/questions/5175854/rack-session-cookie-and-sinatra-setting-and-accessing-data – nictrix

1

Nick a raison à propos du problème de filetage que le Passager met en lumière.

Redis est une excellente solution en mémoire. C'est incroyablement léger. Vous pouvez en savoir plus ici: http://redis.io/. J'utilise l'adaptateur Redis pour Rack::Session

Vous trouverez plus d'informations ici: http://redis-store.org/redis-rack/

Il est assez facile. Il suffit d'inclure gem redis-rack dans votre Gemfile et de le faire dans votre application sinatra

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