我有一个Rails 2.3.5应用程序,我正在迁移到Rails 3.0.10,这会遇到会话问题。
某些代码在集成测试期间失败,因为会话没有id(request.session是空哈希,request.session_options [:id]是nil)。我们目前正在使用webrat,但同样的事情发生在capybara和标准的rails帮助器上。由于某些集成测试具有会话ID,因此似乎可以正确设置会话。看起来只有在尝试访问会话ID(即大多数)之前未登录的测试中缺少会话ID。
我已经尝试将会话后端(它当前基于cookie)切换到ActiveRecord,但这没有帮助。我已经创建了一个新的Rails 3.0.10应用程序,它还有nil会话id。我甚至挖到了Rails的会话处理,看起来如果会话缺少一个会话ID就没有生成。
缺少会话ID是否存在记录在某处的预期行为?如果它是一个错误,是否有正确生成会话ID的Rails版本?
答案 0 :(得分:3)
我看到如何解决这个问题的唯一方法是准备会议。
sid1 = session[:session_id]
sid2 = request.session_options[:id]
但是,如果由于某种原因删除了会话cookie,它仍然可以发生。
答案 1 :(得分:0)
我试过了,没有结果。我也试过会话[:foo] =' bar'因为我喜欢它看起来更好的方式,但仍然没有结果。
我重新启动,仍然没有快乐。然后我进入浏览器设置并删除了我的cookie。修好了。根据这种经验,似乎cookie可以防止强制会话。我一直在更改类名和更改数据库表。不知何故,我已经破坏了我的cookie。