Rack Session Cookie и Sinatra - настройка и доступ к данным - PullRequest
8 голосов
/ 03 марта 2011

Я использовал Rack Session Pool, однако мои пользователи будут выгнаны с одного потока веб-сервера на другой, что приведет к истечению срока действия данных сеанса. Я начал играть просто с включенными сеансами в Sinatra, однако я не могу его использовать, потому что у меня есть несколько приложений, использующих Sinatra (тот же ключ, который он использует - не уверен, так ли это, потому что это тот же хост или нет)

Так как мои приложения будут ломать друг друга, я сейчас пытаюсь использовать Rack Session Cookie и установить переменные (то же самое, что и enable: session, но вы можете установить переменные)

Отлично, так что работает! Но теперь я не могу получить доступ к данным сеанса так, как я их использовал, в пуле сеансов в стойке и во включенном состоянии: сеансы

session[:user] = nick
puts session[:user]

Вы поняли ...

Вопрос в том, почему я могу получить доступ к данным сеанса с сеансом [: user] в Pool и Sinatra enable: сеансы, но не в Rack Session Cookie? Я что-то пропустил? Все, что я делаю, ниже

config.ru

  use Rack::Session::Cookie, :key => 'key',
                             :domain => "localhost",
                             :path => '/',
                             :expire_after => 14400, # In seconds
                             :secret => 'secret'

EDIT:

Провел еще какое-то тестирование и обнаружил, что он фактически помещает его в переменную сеанса, однако, как только он переходит к новому методу или перенаправлению, переменная сеанса, похоже, удаляется (действительно ли этот файл cookie больше 4 КБ ?!) - не может быть, потому что enable: сессии работают просто отлично

Ответы [ 2 ]

12 голосов
/ 03 марта 2011

Вот что я сделал, чтобы решить эту проблему:

  use Rack::Session::Cookie, :key => 'my_app_key',
                             :path => '/',
                             :expire_after => 14400, # In seconds
                             :secret => 'secret_stuff'

Видите ли вы разницу от вышеописанного? - Нет домена, если я позволю Rack :: Session :: Cookie указать домен или браузер (кто бы это ни делал), у меня нет ошибок между несколькими приложениями Sinatra / Rack ...

2 голосов
/ 16 июля 2013

Проблема с доменом 'localhost'.В этой теме более подробно описывается, почему не работает локальный хост в качестве домена: Файлы cookie на локальном хосте с явным доменом

Исправлено так, чтобы настроить домен в файле hosts, например

127.0.0.1    superduper.dev

Затем настройте свой домен в настройках сеансов на superduper.dev.Затем во время разработки вы можете перейти на любой порт, который вам может понадобиться.Ex.superduper.dev:5000

...