2009-06-16 45 views
13

我们正在构建一个用于iframe Facebook应用程序的Rails插件,并且在某一时刻我们需要检查Rail的会话ID cookie是否已设置。从Rails中的任何位置访问“会话密钥”cookie名称

默认情况下,此cookie名为_myprojectname_session,我们需要了解的是cookie本身的实际名称。所以如果没有设置,我们可以做一些重定向,以确保cookie被设置。

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

回答

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自动的,不会使很有意义,它引起了我很头痛......大声笑

+0

谢谢,我花了半个小时试图找出这是 – 2009-08-24 22:31:57

0

我认为会话密钥被存储在一个名为ENV_SESSION_KEY

2

要从视图或控制器内访问会话cookie的名称变量,你可以说:

request.session_options[:session_key] 

,然后访问cookie的原始值,是一个空数组,如果它没有设置,您可以使用:

request.cookies[ request.session_options[:session_key] ] 

cookie的名称(又名session_key可以)在您设置文件。

config.action_controller.session = {  
    :session_key => '_project_session', 
    :secret  => 'long-secret-key' 
    } 
+1

嗯,它似乎并没有工作。我正在使用Rails 2.3.2和请求。session_options散列包含一个名为key的键,而不是:session_key。它设置为“_session_id”,而不是“_myapp_session”,因为它应该是...大声笑 – jimeh 2009-06-17 11:32:08

1

根据我的经验,如果密钥中有下划线,IE浏览器不会设置cookie。换句话说,使用'projectsession'而不是'_project_session'。

-1

我不能工作了如何做到这一点的轨道3 :-(

最后,我最后决定将这个在配置/初始化/ session_store.rb

SESSION_KEY = '_myapp_session' 
MyApp::Application.config.session_store :cookie_store, :key => SESSION_KEY 

,然后访问这个地方需要,例如在一个视图...

<%= ::ENV_SESSION_KEY %> 
+0

这个信息应该保密。 – 2013-12-12 10:07:53

31
Rails.application.config.session_options[:key] 
+1

这工作在Rails 4.1.6上 – kuboon 2014-11-15 04:49:02

0

在Rails 3/4我使用这个:

request.env["rack.request.cookie_hash"] 

这是一个散列,其中包含当前用户的所有cookie,包括会话用户的cookie。 该散列有一个关键的cookie的名称,作为一个值的值的cookie

相关问题