Losing session in rails 2.3.2 app using subdomain

前端 未结 10 1008
轻奢々
轻奢々 2020-12-06 13:39

I have a 2.2.3 app which I upgraded to 2.3.2

It\'s a multi-site (using subdomain) that creates one top level session for all sites.

This is how I change the

相关标签:
10条回答
  • 2020-12-06 14:24

    I'm running Rails 2.3.5 and have

    config.action_controller.session = {:domain => '.localhost:3000'}
    

    in my development.rb but I don't get it to work?

    Something else you need to do?

    0 讨论(0)
  • 2020-12-06 14:27

    Olly's answer is correct, in rails 2.3 it should be:

    config.action_controller.session[:domain] = '.example.com'
    

    I just wanted to add that if you don't already have some session options created you may receive this when using that:

    undefined method `[]=' for nil:NilClass
    

    In that case you should use this instead (which creates the session variable instead of updating it):

    config.action_controller.session ||= {}
    config.action_controller.session[:domain] = '.example.com'
    

    Edit: apparently Rails 2.2.2 projects use something different. "domain" should be named "session_domain" and take the period character off the front of the domain. Try this:

    config.action_controller.session ||= {}
    config.action_controller.session[:session_domain] = 'example.com'
    
    0 讨论(0)
  • 2020-12-06 14:31

    I'm also running 2.3.5 and encountering similar issues to @alfred-nerstu

    No error messages with the patch from @schickm but it doesn't seem to take, either.

    0 讨论(0)
  • 2020-12-06 14:43

    Just wanted to mention that another way to handle the whole subdomain thing for the cookies is dynamically. Works in 2.3.4.

    Something like this in the environment.rb

    # solution to use the cookies in the api. domains
    # this is relevant but in 2.3.4 the code is different
    # http://szeryf.wordpress.com/2008/01/21/cookie-handling-in-multi-domain-applications-in-ruby-on-rails/
    # Just making sure that api. shares the domain name
    require 'dispatcher'
    module ActionController
      class Dispatcher
        def set_session_domain
          host_name = @env['SERVER_NAME']
          new_host_name = whatever #some mod of the host_name, for instance
          ActionController::Base.session = {
            :domain => new_host_name
          }
        end
    
        before_dispatch :set_session_domain
      end
    end
    
    0 讨论(0)
提交回复
热议问题