Вы можете использовать точное совпадение с =
:
SELECT * FROM [MyTable] WHERE Name = 'some name'
Или вы можете использовать LIKE
с подстановочными знаками %
, чтобы содержать:
SELECT * FROM [MyTable] WHERE Name LIKE '%some name%'
Необходимо указать:
.example.com
(заметьте ведущую точку) для сеансовых куки для применения к example.com, а также его субдоменам.
У меня была такая же проблема с сеансами на основе файлов cookie. Обновление до версии 2.1.3, похоже, решило проблему.
у нас была такая же проблема (проигрышные сессии, без поддоменов), с nginx + thin. Миграция на apache + passenger (последняя версия) устранила проблему.
В Rails 2.3 вы должны использовать
config.action_controller.session[:domain] = '.example.com'
Ответ Олли правильный, в 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'
Просто хотел упомянуть, что еще один способ обработки всего субдомена для файлов 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
Я использую Rails 2.3.5 и имею
config.action_controller.session = {:domain => '.localhost:3000'}
в моем development.rb, но не могу заставить его работать?
Что-то еще нужно сделать?
Еще одним пуленепробиваемым решением было бы проверить, существует ли уже сеанс или нет. Если вы слепо заменяете весь объект сеанса, это может сбить вас с толку в будущем.
if ActionController::Base.session
ActionController::Base.session[:domain] = '.example.com'
else
ActionController::Base.session = { :domain => '.example.com' }
end
Мне нравится делать это в файле инициализатора.