我们正在构建一个用于iframe Facebook应用程序的Rails插件,并且在某一时刻我们需要检查Rail的会话ID cookie是否已设置。从Rails中的任何位置访问“会话密钥”cookie名称
默认情况下,此cookie名为_myprojectname_session,我们需要了解的是cookie本身的实际名称。所以如果没有设置,我们可以做一些重定向,以确保cookie被设置。
我们如何从任何地方访问cookie的该死的名字?或者至少从控制器内部?
我们正在构建一个用于iframe Facebook应用程序的Rails插件,并且在某一时刻我们需要检查Rail的会话ID cookie是否已设置。从Rails中的任何位置访问“会话密钥”cookie名称
默认情况下,此cookie名为_myprojectname_session,我们需要了解的是cookie本身的实际名称。所以如果没有设置,我们可以做一些重定向,以确保cookie被设置。
我们如何从任何地方访问cookie的该死的名字?或者至少从控制器内部?
我找到了解决方案。在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
自动的,不会使很有意义,它引起了我很头痛......大声笑
我认为会话密钥被存储在一个名为ENV_SESSION_KEY
要从视图或控制器内访问会话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'
}
嗯,它似乎并没有工作。我正在使用Rails 2.3.2和请求。session_options散列包含一个名为key的键,而不是:session_key。它设置为“_session_id”,而不是“_myapp_session”,因为它应该是...大声笑 – jimeh 2009-06-17 11:32:08
请注意这个影响在某些版本的Rails 2.x中session_options的测试的bug:https://rails.lighthouseapp.com/projects/8994/tickets/2303-testrequest-doesnt-initialize-session_options
根据我的经验,如果密钥中有下划线,IE浏览器不会设置cookie。换句话说,使用'projectsession'而不是'_project_session'。
我不能工作了如何做到这一点的轨道3 :-(
最后,我最后决定将这个在配置/初始化/ session_store.rb
SESSION_KEY = '_myapp_session'
MyApp::Application.config.session_store :cookie_store, :key => SESSION_KEY
,然后访问这个地方需要,例如在一个视图...
<%= ::ENV_SESSION_KEY %>
这个信息应该保密。 – 2013-12-12 10:07:53
在Rails 3/4我使用这个:
request.env["rack.request.cookie_hash"]
这是一个散列,其中包含当前用户的所有cookie,包括会话用户的cookie。 该散列有一个关键的cookie的名称,作为一个值的值的cookie
谢谢,我花了半个小时试图找出这是 – 2009-08-24 22:31:57