Rails 4:从API调用中删除会话值

时间:2014-09-29 14:30:49

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

我有一个rails应用程序'A',它运行在另一个应用程序'B'的iframe上。当应用程序'A'加载到'B'的iframe时,我在会话中设置了一些值。当用户执行应用程序'B'的某些操作时,我想销毁这些会话值。所以,我创建了一个简单的API方法,只删除会话值。每当调用删除会话值的API时API调用成功,但方法中似乎不存在会话值。

我使用了三种应该起作用的方法。但它没有用。 API::AController方法是:

def delete_session_value
   session.key?(:value) # Returns false here
   reset_session # 1
   session[:value] = nil # 2
   session.delete(:value) # 3
end

会话由ApplicationController设置,简单分配session[:value] = 'something'。会话值可在整个应用程序中访问。 API控制器无法访问会话值吗?有没有其他方法可以在不影响流量的情况下解决这个问题?

1 个答案:

答案 0 :(得分:0)

如果会话存储是基于cookie的(默认情况下是),那么这是正确的行为。您无法从iframe读取会话Cookie(或任何其他Cookie)。请参阅https://developer.mozilla.org/en-US/docs/Web/Security/Same-origin_policy

如果这是相同的原始请求,您可以尝试将x-frame-options标头设置为SAMEORIGINhttps://developer.mozilla.org/pl/docs/HTTP/X-Frame-Options