2010-09-09 1 views
1

Мой Сценарий:Есть ли способ загрузить и установить определенный сеанс из базы данных в ruby ​​on rails?

  • Сессии хранятся в базе данных с использованием ActiveRecord :: SessionStore
  • Пользователь на сайте в «http://domain.com»
  • они идут, чтобы обеспечить проверку на «https://domain.secure.com» (наше приложение много доменов, но вы хотите отправить всех через безопасную проверку в том же домене, чтобы сохранить головные боли SSL).
  • Мы присоединять session_id и хэш для аутентификации и идентификации пользователя в «https://domain.secure.com»
  • нагрузки, что пользователи данных сессии, выполнив ActiveRecord :: SessionStore :: Session.find_by_session_id (session_id)

выше всех работает отлично. НО, как я могу установить один и тот же session_id пользователю после того, как он находится на 'https://domain.secure.com'? Я могу прокручивать данные и назначать их сеансу пользователя, но Rails автоматически предоставляет пользователю новый session_id на 'https://domain.secure.com'. Я хочу, чтобы сеанс пользователей сохранялся в одной строке базы данных независимо от того, находятся ли они в «http://domain.com» или «https://domain.secure.com»

Почему я хочу это сделать? Для удобства истечения сеансов. Я могу просто удалить эту строку из таблицы сеансов.

В противном случае я думаю, что мне придется добавить столбец user_id в таблицу сеансов, а затем, когда я хочу закончить сеанс, я удаляю все строки для этого пользователя. Но это звучит более сложно для меня. Я бы предпочел иметь только одну строку в таблице сеансов.

Любые предложения?

ответ

1

Пара способов приблизиться к этому.

Во-первых, вы можете посмотреть более высокий уровень абстракции для аутентификации, позволяющий управлять кросс-сервером. Например, Devise http://github.com/plataformatec/devise

Во-вторых, вы можете переопределить весь контроллер сеанса и написать собственный диспетчер сеансов. Немного больше работы, но не так сложно, если вам в конечном итоге нужна куча пользовательских функций. Я правильно помню, начните с этим в вашей среде:

CGI::Session::ActiveRecordStore.session_class = MySessionClass 

и идти оттуда ..

Смежные вопросы