Rails 4 个会话在请求之间没有更新

Rails 4 session is not updated between requests

假设我们有一个非常简单的控制器显示操作:

def show
  session[:shown_counter] ||= 0
  session[:shown_counter] += 1
  puts "session id: #{session.id}"
  puts "shown #{session[:shown_counter]} times"
end

当我点击 url 从我的浏览器调用此操作时 (chrome),它按预期工作并且我看到 shown_counter 增量。但是我有一个 flash 向正确的 URL 发出一些 (5-10) 请求,调用我的显示操作,但我可以看到计数器没有增加,尽管会话 ID 始终相同。

当我重新加载 flash 时,我会看到计数器增加了 1,但在我再次刷新 flash 或发出 "regular" 请求(使用浏览器)之前,我会得到 "stuck" .

它是如何工作的?为什么计数器不随 Flash 请求增长?

我认为您的 Flash 应用需要获取 Rails 应用服务器在 Set-Cookie header 中提供的 session cookie,存储提供的数据,以及在下一个请求中将此 key-value 对作为 Cookie header 传递。

(换句话说,从每个响应中保存 _myapp_session=Xyz(etc.) 部分,并在每个后续请求中将其作为 Cookie 传递。)

否则,Rails 将不知道您的请求属于哪个 session。

在与 Flash 创作者交谈后,我想我得到了答案。

请求是异步的,这意味着请求不会等待响应 => cookie 不会更新 => 会话(使用 cookie 存储)也不会更新。

我猜是这样的情况,请告诉你这对你是否有意义,如果你同意/不同意。