使用子域丢失rails 2.3.2 app中的会话

mik*_*ica 5 session ruby-on-rails restful-authentication

我有一个2.2.3应用程序,我升级到2.3.2

它是一个多站点(使用子域),可为所有站点创建一个顶级会话.

这是我在production.rb中更改域的方式:

ActionController::Base.session_options[:domain] = "example.com"

# in rails 2.2.2, this is what i used to do:
# ActionController::Base.session_options[:session_domain] = "example.com" 
Run Code Online (Sandbox Code Playgroud)

升级后,奇怪的事情开始发生我无法再使用restful身份验证登录了.它确实对我进行了身份验证,但是一旦我被重定向,就会要求我再次登录.

正如我所说,我使用restful_authentication,我也使用乘客2.1.2.有人可以帮忙吗?

Bri*_*ong 7

Olly的回答是正确的,在rails 2.3中它应该是:

config.action_controller.session[:domain] = '.example.com'
Run Code Online (Sandbox Code Playgroud)

我只是想补充一点,如果你还没有创建一些会话选项,你可能会在使用它时收到:

undefined method `[]=' for nil:NilClass
Run Code Online (Sandbox Code Playgroud)

在这种情况下,您应该使用它(它创建会话变量而不是更新它):

config.action_controller.session ||= {}
config.action_controller.session[:domain] = '.example.com'
Run Code Online (Sandbox Code Playgroud)

编辑:显然Rails 2.2.2项目使用不同的东西."domain"应命名为"session_domain",并将句点字符放在域前面.试试这个:

config.action_controller.session ||= {}
config.action_controller.session[:session_domain] = 'example.com'
Run Code Online (Sandbox Code Playgroud)


vla*_*adr 1

您必须指出:

.example.com
Run Code Online (Sandbox Code Playgroud)

(注意前导点)以便会话 cookie应用于 example.com及其子域