Rails 세션의 현재 사례


83

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

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


1
또한 세션 저장소에 Memcached를 사용하는 것에 대한 현재 생각은 무엇입니까?
Lukas

답변:


102

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

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

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

2
세션 용 ARstore가 매우 느리다고 들었습니다. 벤치 마크를 아는 사람이 있습니까?
Lukas

4
세션 테이블 증가를 관찰하고 그에 따라 정리 작업을 설정하면 성능 문제가 발생하지 않습니다.
Bill Leeper 2012 년

3
이것이 고안과 충돌합니까?
David Mauricio

4
여기 요,이 TheNameOfMyApplication :: Application.config.session_store 같은 것입니다, 3.2 레일 : active_record_store
에두아르도

3
rake db:sessions:create이 많은 사용자와 애플리케이션을위한 확장 성이 좋지 않기 때문에, 레일 4에서 사용되지 및 제거 (너무 많은 데이터베이스는 읽기 및 쓰기). rails 4.0, rake db : sessions : create를 참조하십시오 .

53

쿠키는 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 보안 가이드 의 최신 버전을 확인하는 것이 좋습니다 .


9

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

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

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


4

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

rails generate session_migration

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

rake db:sessions:create

같은 메모에서 rake 작업은 db:sessions:create이제 session_migration생성기를 직접 호출합니다 . task : create => : environment는 ActiveRecord :: Base.connection.supports_migrations가 아니면 "이 데이터베이스에 사용할 수없는 작업 (마이그레이션 지원 없음)"을 발생합니까? 'rails / generators'가 필요합니다 Rails :: Generators.configure! 'rails / generators / rails / session_migration / session_migration_generator'필요 Rails :: Generators :: SessionMigrationGenerator.start [ENV [ "MIGRATION"] || "add_sessions_table"] end
slant

rake db:sessions:create그리고 rails generate session_migration그들은 많은 사용자와 애플리케이션을위한 확장 성이 좋지 않기 때문에 발전기는, 레일 4에서 사용되지 및 제거 (너무 많은 데이터베이스는 읽기 및 쓰기). rails 4.0, rake db : sessions : create를 참조하십시오 .

2

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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.