Rails 2.3会话

我正在开发rails 2.3.2 app。 我需要为订单记录保留session_id,检索它,最后在订单完成时删除session_id。 它在我使用cookie作为会话存储时起作用,但它不适用于active_record存储。 (我重新启动了浏览器,因此没有缓存问题。)

我知道rails 2.3实现了延迟会话加载。 我读了一些关于它的信息,但我仍然感到困惑。

有人可以澄清我如何在这种情况下使用session_id吗?

我在做什么……

用户通过多个页面进行订单。
没有注册,也没有登录。
所以我将session_id保留在订单记录中,以便其他用户无法访问订单。
 @order = Order.last:conditions => {:id => params [:id],:session_id => session [:session_id]}
订单完成后,我将nil设置为session_id列。

您将如何在惰性会话(和active_record存储)环境中实现这种情况?

谢谢。

山姆

我遇到了编程购物车的同样问题。 实际上有两个问题。 从rails 2.3开始,会话延迟加载,会话[: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

格雷格

我更喜欢使用此方法来记录会话ID(但Rails 2.2也会在日志文件中存储会话ID而不进行任何修改)

 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 

我可以使用2.3.5的补丁

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

不要将Hashinheritance添加到CookieStore