请求

时间:2015-11-22 15:39:55

标签: ruby-on-rails flash session ruby-on-rails-4

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

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

当我点击从我的浏览器(chrome)调用此操作的网址时,它按预期工作,我看到shown_counter增量。但是我有一个闪存,它会对正确的URL发出一些(5-10)请求,调用我的show动作,但我可以看到虽然会话ID总是相同但计数器没有增加。

当我重新加载闪光灯时,我会看到计数器增加了1,但是卡住了#34;直到我再次刷新闪光灯或我制作一个"常规"请求(使用浏览器)。

它是如何工作的?为什么计数器不会随着闪存请求而增长?

2 个答案:

答案 0 :(得分:0)

我相信您的Flash应用需要获取您的Rails应用服务器在Set-Cookie标头中提供的会话Cookie,存储提供的数据,并将此键值对作为Cookie标头传递在其下一个请求。

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

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

答案 1 :(得分:0)

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

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

我想这就是场景,请告诉您是否对您有意义以及您是否同意/不同意。