从Rails中的任何位置访问“会话密钥”cookie名称
我们正在构建一个用于在iframe Facebook应用程序中使用的Rails插件,并且我们需要检查是否已经设置了Rail的会话ID cookie。
默认情况下,此cookie名为_myprojectname_session ,我们需要找出的是cookie本身的实际名称。 因此,如果没有设置,我们可以进行一些重定向以确保设置cookie。
我们如何从任何地方访问该死的名称? 或者至少从控制器内部?
Rails.application.config.session_options[:key]
我找到了解决方案。 在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
要从视图或控制器中访问会话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' }
根据我的经验,如果密钥中有下划线,IE SOMETIMES不会设置cookie。 换句话说,使用’projectsession’而不是’_project_session’。
我认为会话密钥存储在一个名为ENV_SESSION_KEY的变量中
另请注意,此错误会影响某些版本的Rails 2.x中的session_options周围的测试: https : //rails.lighthouseapp.com/projects/8994/tickets/2303-testrequest-doesnt-initialize-session_options
在Rails 3/4我使用这个:
request.env["rack.request.cookie_hash"]
这是一个包含当前用户的所有cookie的哈希,包括会话的cookie。 散列具有cookie的名称作为键,并且作为值的值是cookie的值
我无法解决如何在rails 3中做到这一点:-(
最终我把它放在config / initializers / session_store.rb中
SESSION_KEY = '_myapp_session' MyApp::Application.config.session_store :cookie_store, :key => SESSION_KEY
然后在需要的地方访问它,例如在视图中…
<%= ::ENV_SESSION_KEY %>