Потеря сессии в направляющих 2.3.2 приложения с помощью субдомена

Вы можете использовать точное совпадение с =:

SELECT * FROM [MyTable] WHERE Name = 'some name'

Или вы можете использовать LIKE с подстановочными знаками %, чтобы содержать:

SELECT * FROM [MyTable] WHERE Name LIKE '%some name%'
5
задан Johnny Bones 13 November 2013 в 03:01
поделиться

8 ответов

Необходимо указать:

.example.com

(заметьте ведущую точку) для сеансовых куки для применения к example.com, а также его субдоменам.

1
ответ дан 18 December 2019 в 13:19
поделиться

У меня была такая же проблема с сеансами на основе файлов cookie. Обновление до версии 2.1.3, похоже, решило проблему.

-1
ответ дан 18 December 2019 в 13:19
поделиться

у нас была такая же проблема (проигрышные сессии, без поддоменов), с nginx + thin. Миграция на apache + passenger (последняя версия) устранила проблему.

0
ответ дан 18 December 2019 в 13:19
поделиться

В Rails 2.3 вы должны использовать

config.action_controller.session[:domain] = '.example.com'
3
ответ дан 18 December 2019 в 13:19
поделиться

Ответ Олли правильный, в rails 2.3 он должен быть:

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

Я просто хотел добавить, что если у вас еще не созданы какие-то параметры сеанса, вы можете получить это при использовании этого:

undefined method `[]=' for nil:NilClass

В этом случае вам следует использовать вместо этого следующее (которое создает переменную сеанса вместо ее обновления):

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

Изменить: очевидно, в проектах Rails 2.2.2 используется что-то другое. "домен" должен быть назван "домен_сеанса" и убрать символ точки в начале домена. Попробуйте следующее:

config.action_controller.session ||= {}
config.action_controller.session[:session_domain] = 'example.com'
7
ответ дан 18 December 2019 в 13:19
поделиться
​​

Просто хотел упомянуть, что еще один способ обработки всего субдомена для файлов cookie - динамический. Работает в 2.3.4.

Примерно так в среде 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
1
ответ дан 18 December 2019 в 13:19
поделиться

Я использую Rails 2.3.5 и имею

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

в моем development.rb, но не могу заставить его работать?

Что-то еще нужно сделать?

1
ответ дан 18 December 2019 в 13:19
поделиться

Еще одним пуленепробиваемым решением было бы проверить, существует ли уже сеанс или нет. Если вы слепо заменяете весь объект сеанса, это может сбить вас с толку в будущем.

if ActionController::Base.session
  ActionController::Base.session[:domain] = '.example.com'
else
  ActionController::Base.session = { :domain => '.example.com' }
end

Мне нравится делать это в файле инициализатора.

2
ответ дан 18 December 2019 в 13:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: