我有一个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使用简单的assignment session[:value] = 'something'从ApplicationController设置会话。在整个应用程序中都可以访问会话值。API控制器是否无法访问会话值?有没有其他方法可以在不影响流程的情况下解决这个问题?
发布于 2014-09-29 22:44:15
如果你的会话存储是基于cookie的(默认情况下是),那么这是一个正确的行为。不能从iframe读取会话cookies (或任何其他cookies)。参见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
https://stackoverflow.com/questions/26102327
复制相似问题