Ruby on rails Rails会话id为零
我有一个Rails2.3.5应用程序,我正在迁移到Rails3.0.10,它遇到了会话问题Ruby on rails Rails会话id为零,ruby-on-rails,session,Ruby On Rails,Session,我有一个Rails2.3.5应用程序,我正在迁移到Rails3.0.10,它遇到了会话问题 sid1 = session[:session_id] sid2 = request.session_options[:id] 某些代码在集成测试期间失败,因为会话没有id(request.session是空哈希,request.session_options[:id]为nil)。我们目前正在使用webrat,但同样的情况也发生在水豚和标准rails助手上。会话似乎设置正确,因为一些集成测试
sid1 = session[:session_id]
sid2 = request.session_options[:id]
某些代码在集成测试期间失败,因为会话没有id(request.session是空哈希,request.session_options[:id]为nil)。我们目前正在使用webrat,但同样的情况也发生在水豚和标准rails助手上。会话似乎设置正确,因为一些集成测试具有会话ID。似乎只有在尝试访问会话id之前未登录的测试(即大多数测试)中缺少会话id
我尝试将会话后端(当前基于cookie)切换到ActiveRecord,但没有任何帮助。我已经创建了一个新的Rails 3.0.10应用程序,它也有零会话ID。我甚至深入研究了Rails的会话处理,如果某个会话缺少会话id,则看起来没有生成会话id
这种缺少会话ID的行为是否是某个地方记录的预期行为?如果这是一个bug,那么有没有一个版本的Rails可以正确地生成会话ID?我所看到的唯一解决方法就是初始化会话
sid1 = session[:session_id]
sid2 = request.session_options[:id]
但是,如果出于某种原因删除了会话cookie,它仍然可能发生。我尝试了,但没有结果。我还尝试了session[:foo]=“bar”,因为我喜欢它看起来更好的方式,但仍然没有结果
我重新启动了,仍然没有快乐。然后我进入我的浏览器设置并删除了我的cookies。这就解决了问题。从这个经验来看,cookie似乎可以防止会话被强制执行。我一直在更改类名和数据库表。不知何故,我破坏了我的cookie。我刚刚在Rails 3.2.8应用程序和Capybara 2.0.1上遇到了同样的情况。有更新吗?