我们假设我们有一个非常简单的控制器显示动作:
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;直到我再次刷新闪光灯或我制作一个"常规"请求(使用浏览器)。
它是如何工作的?为什么计数器不会随着闪存请求而增长?
答案 0 :(得分:0)
我相信您的Flash应用需要获取您的Rails应用服务器在Set-Cookie
标头中提供的会话Cookie,存储提供的数据,并将此键值对作为Cookie
标头传递在其下一个请求。
(换句话说,保存每个回复中的_myapp_session=Xyz(etc.)
部分,并在每个后续请求中将其作为Cookie
传递。)
否则,Rails将不知道您的请求属于哪个会话。
答案 1 :(得分:0)
与Flash创作者交谈后,我想我得到了答案。
请求是异步的,这意味着请求不会等待响应=>饼干不会被更新=>会话(使用cookie商店)也不会更新。
我想这就是场景,请告诉您是否对您有意义以及您是否同意/不同意。