Rails 2.3 сессия - PullRequest
       11

Rails 2.3 сессия

5 голосов
/ 24 июня 2009

Я разрабатываю приложение для рельсов 2.3.2. Мне нужно сохранить session_id для записи заказа, извлечь ее и, наконец, удалить session_id, когда заказ будет выполнен. Это работало, когда я использовал куки в качестве хранилища сессий, но не для хранилища active_record. (Я перезапустил браузер, поэтому проблема с кешем отсутствует.)

Я знаю, что в rails 2.3 реализована отложенная загрузка сеанса. Я прочитал некоторую информацию об этом, но все еще в замешательстве.

Может кто-нибудь уточнить, как я использую session_id для такого случая?

То, что я делаю, это ...

A user make an order going through several pages.
There is no sign-up, neither login.
So I keep session_id in the order record so that no other user can access the order.
@order = Order.last :conditions => {:id => params[:id], :session_id => session[:session_id] }
When the order is finished, I set nil to session_id column.

Как бы вы реализовали такой случай в ленивом сеансе (и хранилище active_record)?

Спасибо.

Sam

Ответы [ 3 ]

9 голосов
/ 08 октября 2009

Я столкнулся с той же проблемой при программировании корзины покупок. На самом деле есть две проблемы. Начиная с версии 2.3, сессии загружаются лениво, а session [: session_id] больше не работает. Вы должны получить доступ к сеансу, прежде чем сможете работать с ним.

puts request.session_options[:id]
session[:session_id] # this forces load of the session in Rails 2.3.x
puts request.session_options[:id]

Это выводит:

nil
78eb1e371f3378ed98874f9ce372d652

Обновление : session.session_id устарел, поэтому вместо него используйте request.session_options [: id].

Обновление 2 : это будет исправлено в 3.x (не 2.3.5) https://rails.lighthouseapp.com/projects/8994/tickets/2268-rails-23-session_optionsid-problem

Грег

3 голосов
/ 08 июня 2010

Я предпочитаю использовать этот метод для регистрации идентификатора сессии (но Rails 2.2 также хранит идентификатор сессии в файле журнала без каких-либо изменений)

application_controller.rb
  before_filter :log_session_id

  private
  def log_session_id
    session[:session_id]
    logger.info "Session ID: " + request.session_options[:id]
  end
end
0 голосов
/ 11 марта 2010

Я мог бы использовать этот патч до 2.3.5

http://github.com/rails/rails/commit/e0f1a7dc191ffebc9f6cadb6232e567fee8aa491

не добавляйте наследование Hash в CookieStore, хотя

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...