2010-03-19 2 views
3

나는 수정없이 Restful Authentication을 사용하는 인증 시스템과 함께 Rails 애플리케이션을 사용하고있다.레일스에서 ​​사용자가 다른 사용자의 세션을 가질 수있는 원인은 무엇입니까?

사용자가 잘못된 사용자로 로그인 한 것으로 나타났습니다. 적어도 첫 번째 경우에는 이전에 로그인 한 적이없는 매우 첫 번째 페이지보기였습니다.

세션 ID가 섞일 수 있습니까? 이런 식으로 서버에 세션 데이터가 저장되지 않았기 때문에 CookieStore로 전환하면 불가능합니다. 문제가 Passenger와 관련이 있다고 생각하지만 디버깅을 시작할 위치를 모른다. 그것만이 몇 달 동안 약 4 번 생존하여 실제로 번식하는 것이 불가능합니다.

환경 : 액티브 세션 저장 레일 2.2.2 승객 2.0.1 아파치 2 루비 1.8.6

많은 감사

+0

이 문제에 대한 해결책을 찾았습니까? – Eric

답변

0

당신이 클라이언트 측 세션 저장 (기본에를 사용하는 경우 최신 레일 버전), 응용 프로그램에서 실수 일 수 있으며 도난당한 세션이 아닐 수도 있습니다. 사용하는 세션 저장 영역과 작동 방식을 알고 있어야합니다.

+0

내가 여기의 논리를 따르는 지 확신 할 수 없다 ... 세션이 쿠키 (현재 기본값)로 직렬화되는지 또는 ID가 생성되어 데이터베이스에 저장되는지 여부, 누군가 다른 사람의 세션을 잡는 유일한 방법은 서버 그 저장 매체에 의존하지 않을 가능성이있는 잘못된 쿠키 (세션 ID 또는 완전히 직렬화 된 세션)를 보냅니다. 그러나, 아마 나는 여기에서 무엇인가 멀리 바라보고있다? –

0

난 당신이 여기 스레드에 관심이있을 수 있습니다 ... 이것도보고 있어요 : Users take sessions of other users when sessions are stored in memcached (Rails) 나의 현재의 생각이 실제로 여객과 관련이 있다는 것입니다

, 즉 '당신 것 사이의 일반적인 구성 요소가 될 것으로 보인다 다시보고, 내가보고있는 것, 그리고 다른 게시물 보고서 (우리는 모두 다른 세션 저장소와 레일 버전을 사용하고 있습니다)에 대해 알려줍니다.

0

한때 비슷한 문제가 발생했으며 사용자가 인스턴스 변수 대신 클래스 변수에 저장되어있는 것으로 나타났습니다.

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 및 사용하는 사용자 변수를 모두 작성하여 내 문제 해결을 시작할 것로 변경되었습니다 어떤 차이가 있다면.

관련 문제