我在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%的时间,会话在其记录的表中为零。
答案 0 :(得分:5)
我找到了答案,看起来Rails试图通过仅在存储某些内容时创建会话来提高效率。因此,在不存储内容的情况下访问session.id不会返回一致的结果。
您需要通过在其中存储内容来强制创建会话。
TLDR:在访问会话ID之前将其添加到某处。
session[:foo] = "bar"
来源: http://www.gani.com.au/2013/08/force-session-creation-in-rails/