从Rails中的任何位置访问“会话密钥”cookie名称

时间:2009-06-16 13:46:45

标签: ruby-on-rails session cookies

我们正在构建一个用于在iframe Facebook应用程序中使用的Rails插件,并且我们需要检查是否已经设置了Rail的会话ID cookie。

默认情况下,此cookie名为 _myprojectname_session ,我们需要找出的是cookie本身的实际名称。因此,如果没有设置,我们可以进行一些重定向以确保设置cookie。

我们如何从任何地方访问该死的名字?或至少在控制器内?

8 个答案:

答案 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.sessionBase.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 %>