我们正在构建一个用于在iframe Facebook应用程序中使用的Rails插件,并且我们需要检查是否已经设置了Rail的会话ID cookie。
默认情况下,此cookie名为 _myprojectname_session ,我们需要找出的是cookie本身的实际名称。因此,如果没有设置,我们可以进行一些重定向以确保设置cookie。
我们如何从任何地方访问该死的名字?或至少在控制器内?
答案 0 :(得分:34)
Rails.application.config.session_options[:key]
答案 1 :(得分:12)
我找到了解决方案。在Rails 2.3.2中,至少config/initializers/session_store.rb
中设置的会话密钥如下:
ActionController::Base.session = {
:key => '_myapp_session',
:secret => '[...]'
}
你可以读出这样的值:
ActionController::Base.session_options[:key]
从Base.session
到Base.session_options
自动地,没有多大意义,这让我头疼...... lol
答案 2 :(得分:2)
要从视图或控制器中访问会话cookie的名称,您可以说:
request.session_options[:session_key]
然后访问该cookie的原始值,如果没有设置为空数组,则使用:
request.cookies[ request.session_options[:session_key] ]
Cookie名称(aka session_key)在config/environment.rb
文件中设置。
config.action_controller.session = {
:session_key => '_project_session',
:secret => 'long-secret-key'
}
答案 3 :(得分:1)
根据我的经验,如果密钥中有下划线,IE SOMETIMES不会设置cookie。换句话说,使用'projectsession'而不是'_project_session'。
答案 4 :(得分:0)
我认为会话密钥存储在名为ENV_SESSION_KEY
的变量中答案 5 :(得分:0)
另请注意,在某些版本的Rails 2.x中,此错误会影响session_options周围的测试:https://rails.lighthouseapp.com/projects/8994/tickets/2303-testrequest-doesnt-initialize-session_options
答案 6 :(得分:0)
在Rails 3/4中,我使用它:
request.env["rack.request.cookie_hash"]
这是一个包含当前用户的所有cookie的哈希,包括会话的cookie。 散列具有cookie的名称作为键,并且值为cookie的值
答案 7 :(得分:-1)
我无法弄清楚如何在rails 3中执行此操作: - (
最终我把它放在config / initializers / session_store.rb
中SESSION_KEY = '_myapp_session'
MyApp::Application.config.session_store :cookie_store, :key => SESSION_KEY
然后在需要的地方访问它,例如在视图中......
<%= ::ENV_SESSION_KEY %>