【问题标题】:Rails 4 session.id occasionally nilRails 4 session.id 偶尔为零
【发布时间】:2015-08-26 16:09:27
【问题描述】:

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

【问题讨论】:

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


【解决方案1】:

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

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

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

session[:foo] = "bar"

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

【讨论】:

  • 这不是一个错误,而是所有版本的 Rails 中 cookie 会话存储的一个可疑“功能”。如果 cookie 不存在(第一次访问站点或已删除 cookie),则会话将为空,因此会话 ID 将为 nil。
猜你喜欢
  • 1970-01-01
  • 2016-06-23
  • 1970-01-01
  • 2015-04-14
  • 1970-01-01
  • 2017-12-28
  • 2016-11-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多