我有一个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控制器无法访问会话值吗?有没有其他方法可以在不影响流量的情况下解决这个问题?
答案 0 :(得分:0)
如果会话存储是基于cookie的(默认情况下是),那么这是正确的行为。您无法从iframe
读取会话Cookie(或任何其他Cookie)。请参阅https://developer.mozilla.org/en-US/docs/Web/Security/Same-origin_policy。
如果这是相同的原始请求,您可以尝试将x-frame-options
标头设置为SAMEORIGIN
。 https://developer.mozilla.org/pl/docs/HTTP/X-Frame-Options