Skip to content

Instantly share code, notes, and snippets.

@bschwartz
Created February 15, 2009 22:12
  • Star 0 You must be signed in to star a gist
  • Fork 6 You must be signed in to fork a gist
Star You must be signed in to star a gist
Save bschwartz/64874 to your computer and use it in GitHub Desktop.
# Adjust sessions so they work across subdomains
# This also will work if your app runs on different TLDs
# from: http://szeryf.wordpress.com/2008/01/21/cookie-handling-in-multi-domain-applications-in-ruby-on-rails/
# modified to work with Rails 2.3.0
module ActionControllerExtensions
def self.included(base)
base::Dispatcher.send :include, DispatcherExtensions
end
module DispatcherExtensions
def self.included(base)
base.send :before_dispatch, :set_session_domain
end
def set_session_domain
if @env['HTTP_HOST']
# remove the port if there is one
domain = @env['HTTP_HOST'].gsub(/:\d+$/, '')
# turn "brendan.app.com" to ".app.com"
# and turn "app.com" to ".app.com"
if domain.match(/([^.]+\.[^.]+)$/)
domain = '.' + $1
end
@env['rack.session.options'] = @env['rack.session.options'].merge(:domain => domain)
end
end
end
end
ActionController.send :include, ActionControllerExtensions
@bmfreitas
Copy link

Great!

@findchris
Copy link

Note that this will no work for many domains, as 'google.co.uk' would become 'co.uk', which is not legal.

@bschwartz
Copy link
Author

@findchris, great point and something that actually bit me just the other day. It's a tricky problem to solve in a truly correct and generalized fashion. I ended up just solving my specific problem (not a general solution).

Let me know if you come up with a solution to this. I'd love to see it!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment