2017-11-01 7 views
0

레일 응용 프로그램이 있으며 인증 용으로 devise를 사용하고 있습니다. http://localhost:5000/에 에 성공적으로 로그인하면 동일한 브라우저에서 http://127.0.0.1:5000/에 액세스하려고합니다. http://127.0.0.1:5000/에 액세스하면 바로 로그인되지만 응용 프로그램은 로그 아웃 된 상태로 유지됩니다. 무슨 일이 벌어 지나요? 같은 브라우저에서 두 URL에 모두 액세스하려고 할 때 실제로 이해할 수 없습니까?Devits 세션이 다른 URL에 계속 적용되지 않습니다.

UPDATE :

내 설정/초기화/session_store.rb

Rails.application.config.session_store :cache_store, key: '_app' 

답변

4

당신이 로그인 한 사실이 cookie에 저장되어있는 session에 저장합니다. 보안상의 이유로 브라우저는 쿠키가 설정된 URL로만 쿠키를 보냅니다.

브라우저의 관점에서 보면 localhost127.0.0.1은 완전히 다른 URL입니다. 따라서 localhost의 쿠키에 저장된 로그인 정보는 127.0.0.1에서 실행중인 서버로 전송되지 않으므로 127.0.0.1에서 실행중인 서버에는 기존 세션에 대한 정보가 localhost에 없습니다.

UPDATE : 사용자에 속한 캐시 저장소에 어떤 세션 정보가 여전히 쿠키에 저장되기 때문에 세션을 저장하기 위해 cache_store 사용은

아무것도 변경되지 않습니다.

서버에서 생성 된 모든 세션을 어딘가에 저장해야한다는 이미징. 그리고 사용자가 돌아 오면 서버는 사용자가 속한 세션을 알아야합니다. 이 문제의 단순화 된 해결책은 각 세션에 임의의 번호를 할당하고 사용자에게이 번호 (쿠키에 저장 됨)를 제공하는 것입니다. 사용자가 쿠키를 반환하면 서버가 해당 번호만큼 세션을로드 할 수 있습니다.

그리고 쿠키는 도메인에 바인딩됩니다. 이것은 브라우저의 보안 기능입니다. 작동하지 않으면 모든 세션이 모든 도메인으로 전송됩니다. Google은 사용자가 Facebook에 로그인했는지 알게 될 것이며 모든 웹 사이트에서 은행의 쿠키가 있음을 알게됩니다.

+0

업데이트 된 질문보기 –

+0

내 주소록에 대한 내 대답이 업데이트되었습니다. – spickermann