Rails 4 session.id偶尔会为

时间:2015-06-11 05:58:50

标签: ruby-on-rails ruby postgresql session heroku

我在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%的时间,会话在其记录的表中为零。

1 个答案:

答案 0 :(得分:5)

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

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

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

session[:foo] = "bar"

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