質問

githubにあるrestful_authenticationの現在のバージョンを使用していますが、奇妙なセッションの問題がたくさんあります。サーバーは、どういうわけかユーザーにセッションを割り当てるべきではないようです。これは、ログアウト/ログインした障壁を越えるときにのみ発生します。

例を次に示します。サーバーでアクティブなセッションがない状態で、ユーザーAでアカウントにログインします。別のマシンでユーザーBでログインします。ユーザーBからログアウトすると、ログアウトリダイレクトが発生した後、次のようにログインします。ユーザーA.この時点から、あたかもそのユーザーとしてログインしたかのようにサイトをナビゲートし続けることができます!ログを介して私が観察したことは、このハイジャックが発生すると、セッションIDが同じではないということです。ユーザーAは両方のセッションにログインしていますが、セッションIDは完全に異なります。これは何が起こるかのほんの一例です。一見ランダムであるため、問題を確実に再現することはできません。

環境またはそれが実行されているサーバーの症状ではないようです。雑種と同乗者の両方を使用して問題を再現できます。また、開発および本番でも見ました。このアプリケーションでdbベースのセッションを使用しており、Rails 2.1.1で実行しています。ジェネレーターを呼び出すときにステートフルオプションを適用しました。それ以外の場合、セッションの処理方法に他の変更は加えられていません。

更新 これは、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
役に立ちましたか?

解決 2

これが回避策であるので、これがあまりに多くの答えであるかどうかはわかりません。 Cookieベースのセッションに切り替えるだけで、すべてがスムーズに機能します。

他のヒント

これは、あなた(またはrestful_authenticationを書いた人)が現在のユーザーをクラス変数にキャッシュしている場合に発生する可能性があります。 " User.current_user "の使用を推奨する記事をたくさん見ましたが、クラスはリクエストにまたがってキャッシュされるため、セッションが汚染される可能性があります。

このサイトはリモートですか?同じネットワーク上の2台の別々のコンピューターにログインしていますか?

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top