Rails 4 session.id偶尔为零

我在Heroku上运行一个简单的网站,当我运行应用程序时,我注意到一些奇怪的事情。 当我的用户登录数据库时,大约有50-60%的用户报告了一个nil session_id。

我正在使用active_record_store作为我的会话处理程序,使用Postgres作为我的数据库服务器。 我使用cookie_store得到了类似的结果,所以我不确定我做错了什么。 我唯一的猜测是用户发出的第一个请求,可能还没有填充id。 会话表具有正确的条目数,但我的跟踪表没有。

示例代码

class CaptionController < ApplicationController def index @image = Image.order("RANDOM()").first Tracking.log(session.id, Tracking::VIEW_CAPTION_ON_IMAGE, @image.id) end 

上面的代码占50%的时间,会话在其记录的表中为零。

我找到了答案,看起来Rails试图通过仅在有东西存储时创建会话来提高效率。 因此,在不存储内容的情况下访问session.id不会返回一致的结果。

您需要通过在其中存储内容来强制创建会话。

TLDR:在访问会话ID之前将其添加到某处。

 session[:foo] = "bar" 

资料来源http//www.gani.com.au/2013/08/force-session-creation-in-rails/