Неудачная попытка захвата сеанса с надежной аутентификацией

Я использую текущую версию restful_authentication, которая находится в github, и у меня возникла проблема с некоторыми странными проблемами. Кажется, сервер каким-то образом назначает сеансы пользователям, которых это не должно быть. Это происходит только при скрещивании входного/входного барьера.

Вот пример. Если на сервере нет активных сеансов, я вхожу в учетную запись с пользователем A. На другой машине я вхожу в систему с пользователем B. Затем, когда вы выходите из системы пользователя B, когда-то после перенаправления выхода из системы произойдет, я войду в систему как пользователь A. С этого момента я могу продолжить навигацию по сайту, как если бы я вошел в систему как этот пользователь! Что-то, что я наблюдал через журналы, заключается в том, что когда этот захват происходит, идентификаторы сеансов не совпадают. Пользователь A вошел в оба сеанса, но идентификатор сеанса полностью отличается. Это всего лишь один пример того, что может произойти. Я не могу воспроизвести проблему надежно, поскольку она кажется случайной.

Это не похоже на симптом среды или сервера, на котором он работает. Я могу воспроизвести проблему, используя как дворняжку, так и пассажира. Я также видел это в разработке и производстве. Я использую сеансы на основе db в этом приложении и работает на Rails 2.1.1. При вызове генератора я применил параметр stateful. В противном случае никакие другие изменения не были сделаны в отношении того, как обрабатываются сеансы.

Update Вот метод оскорбления, который пришел непосредственно из restful_authentication.

# Accesses the current user from the session.
# Future calls avoid the database because nil is not equal to false.
def current_user
  @current_user ||= (login_from_session || login_from_basic_auth || login_from_cookie) unless @current_user == false
end

Ответ 1

Я не знаю, так ли это ответ, потому что это работа. Все, что я сделал, это переключение на сеансы на основе файлов cookie, и все работает плавно.

Ответ 2

Это может произойти, если вы (или те, кто написал restful_authentication), кэшируете текущего пользователя в переменной класса. Я видел кучу статей, посвященных использованию "User.current_user", но поскольку классы кэшируются по запросам, это может вызвать потерю сеанса.

Ответ 3

Этот сайт удален? Вы входите в систему на двух отдельных компьютерах в одной сети?