В Rails, что может заставить пользователя иметь сеанс другого пользователя? - PullRequest
3 голосов
/ 19 марта 2010

У меня есть приложение Rails, использующее систему аутентификации с использованием Restful Authentication без каких-либо изменений.

Пользователи сообщили, что вошли в систему как неправильный пользователь. По крайней мере, в одном случае это было на самом первом просмотре страницы, ни разу не входя в систему раньше.

Возможно ли, что их сессионные идентификаторы перепутаны? Сделает ли переключение на CookieStore невозможным для этого, так как данные сеанса не сохраняются на сервере таким образом? Я подозреваю, что проблема связана с Пассажиром, но я не знаю, с чего начать отладку. Это происходило только около 4 раз за несколько месяцев жизни, поэтому практически невозможно воспроизвести.

Окружающая среда: Хранилище сессий ActiveRecord Рельсы 2.2.2 Пассажир 2.0.1 Apache 2 Рубин 1.8.6

Большое спасибо

Ответы [ 3 ]

0 голосов
/ 25 ноября 2010

Я тоже это вижу ... Вас может заинтересовать нить здесь: Пользователи принимают сеансы других пользователей, когда сеансы хранятся в memcached (Rails)

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

0 голосов
/ 25 ноября 2010

Однажды я столкнулся с подобной проблемой, и причина оказалась в том, что пользователь хранился в переменной класса, а не в переменной экземпляра.Скажем, например, что вы аутентифицируете / сохраняете своего пользователя следующим образом:

  def current_user
    User.current ||= ( login_from_session || login_by_password )
  end

В этом случае пользователь будет сохранен в классе, а не экземпляр, и первый пользователь, который войдет в систему, будет сохранен в классе иэто также будет перенесено на следующую сессию пользователей.Чтобы решить эту проблему, это было изменено на

def current_user
  @current_user ||= ( login_from_session || login_by_password )
end

Это, конечно, только одна из многих возможностей, но я бы начал устранение неполадок, записав в лог как user_id из сеанса, так и пользовательскую переменную, которую вы используете.чтобы увидеть, есть ли различия.

0 голосов
/ 31 августа 2010

Если вы используете хранилище сеансов на стороне клиента (по умолчанию для более новых версий Rails), это может быть ошибка в приложении, а не украденный сеанс (или что-то в этом роде). Убедитесь, что вы знаете, какое хранилище сеансов вы используете и как оно работает.

...