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 存储)也不会更新。
我猜是这样的情况,请告诉你这对你是否有意义,如果你同意/不同意。
假设我们有一个非常简单的控制器显示操作:
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 存储)也不会更新。
我猜是这样的情况,请告诉你这对你是否有意义,如果你同意/不同意。