Rails 4 session.id 偶尔为零
Posted
技术标签:
【中文标题】Rails 4 session.id 偶尔为零【英文标题】:Rails 4 session.id occasionally nil 【发布时间】: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% 的时间,会话在它记录到的表中为零。
【问题讨论】:
你看到的和你设置@image
的方式一样吗?你在哪里设置/检索session
?
根据 Rails 4 API,这是由 Controller 预先设置的。我正在查看***.com/questions/26754239/rails-4-1-6-session-id 以供参考。
【参考方案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。以上是关于Rails 4 session.id 偶尔为零的主要内容,如果未能解决你的问题,请参考以下文章