Rails 세션의 현재 사례 나는 한동안 SqlSessionStore를

누구든지 Rails 및 세션에 대한 “모범 사례”팁이 있습니까? Rails 3의 기본 세션 유형은 여전히 ​​CookieStore입니다. 나는 한동안 SqlSessionStore를 사용했고 잘 작동했지만 CookieStore를 선호하는 것으로 이동할 수 있습니다.

민감한 정보에 대해 CookieStore를 사용하는 것은 여전히 ​​좋은 생각이 아니고, 심지어 소금 정보가있는 경우에도 DB에 더 잘 저장됩니까?



답변

매우 기밀 정보를 저장하는 데 사용해서는 안되는 쿠키 기반 기본값 대신 세션에 데이터베이스를 사용합니다.

다음을 사용하여 세션 테이블 만들기

rake db:sessions:create

마이그레이션 실행

rake db:migrate

또한 레일에 ActiveRecord를 사용하여 세션을 관리하도록 지시하십시오.

레일즈 3

config / initializers / session_store.rb :

Rails.application.config.session_store :active_record_store

레일스 2

config / environment.rb :

config.action_controller.session_store = :active_record_store


답변

쿠키는 Rails 4에서 기본적으로 암호화됩니다.

Rails 4에서 CookieStore 쿠키는 기본적으로 암호화되고 서명됩니다.

당신은 단지 한 경우 secret_token설정, 쿠키 서명했으나 암호화되지 않습니다. 즉, 사용자가 user_id앱의 비밀 키를 모르면 변경할 수는 없지만 쉽게 읽을 수 있습니다 user_id. 이것은 Rails 3 앱의 기본값입니다.

secret_key_base설정 한 경우 쿠키가 암호화됩니다. 이는 사용자가 암호화 된 쿠키를 변경하거나 읽을 수 없다는 점에서 서명 된 쿠키보다 한 단계 더 나아갑니다. 이것은 Rails 4에서 시작하는 기본값입니다.

당신이 모두있는 경우 secret_tokensecret_key_base세트를, 쿠키 암호화, 서명 레일 3에 의해 생성 된 쿠키를 투명하게 읽고 업그레이드 경로를 원활하게 제공하기 위해 암호화됩니다됩니다.

레일스 4에서 액티브 레코드 세션 스토어가 더 이상 사용되지 않음

이 답변 은 이제 Rails 4와 관련하여 오래되었습니다. Active Record Session Store는 더 이상 사용되지 않고 Rails에서 제거되었으므로 다음 생성기는 더 이상 작동하지 않습니다.

  • rake db:sessions:create

  • rails generate session_migration

이것은 이 답변 에서 지적되었습니다 . Active Record Session Store가 더 이상 사용되지 않는 이유는 이 블로그 게시물에 설명 된대로 애플리케이션에 액세스하는 사용자가 많을 때 데이터베이스에 대한 읽기 / 쓰기가 제대로 확장되지 않기 때문입니다 .

… 액티브 레코드 세션 저장소의 한 가지 주요 문제는 확장 할 수 없다는 것입니다. 데이터베이스에 불필요한 부하를가합니다. 애플리케이션이 많은 양의 트래픽을 수신하면 세션 데이터베이스 테이블에 읽기 / 쓰기 작업이 계속해서 쏟아집니다.

Rails 4부터 Active Record 세션 저장소가 핵심 프레임 워크에서 제거되었으며 이제 더 이상 사용되지 않습니다.

Active Record Session Store를 계속 사용하고 싶다면 여전히 gem으로 사용할 수 있습니다 .

현재 Rails 세션 모범 사례

Ruby on Rails 세션에 대한 최신 모범 사례를 보려면 Ruby on Rails 보안 가이드 의 최신 버전을 확인하는 것이 좋습니다 .


답변

나는 어떤 플랫폼의 누구라도 쿠키 기반 세션을 처리하는 방식에 변화가 있다고 생각하지 않습니다. 서버의 통제를 벗어난 모든 것에 회의하십시오 (쿠키, 양식 게시물 등). 이것이 웹 개발의 일반적인 원칙입니다.

암호화에 관해서는 그 전면에서 변경된 사항이 있는지 모르겠습니다.

쿠키 저장소에서 염두에 두어야 할 사항은 데이터 양의 제한이며,이 데이터는 모든 요청에서 유선으로 전송된다는 점입니다. 데이터베이스 저장소는 ID 만 전송하고 데이터는 서버에 있습니다. .


답변

FWIW, 레일 3.1은 실행을 제안합니다.

rails generate session_migration

그러나 이것은 다음과 똑같은 마이그레이션을 생성합니다.

rake db:sessions:create


답변

Rails 기본값은 나에게 꽤 좋은 것 같습니다. CookieStore는 빠르며 대부분의 사용 사례를 다루어야합니다. 확실히 당신은 4kb로 제한되고 당신의 데이터는 사용자에게 보일 것입니다. 그러나 Rails 방식은 정수 ID와 기본 문자열 값과 같은 것들에 대해서만 세션을 사용하는 것입니다. 당신은 아마 그것을 잘못하고있을 것입니다.


답변