2010-02-14 2 views
3

각 브라우저 (사용자 설정)에 대한 일부 영구 데이터를 저장하고 사이트를 사용하기 위해 로그인하지 않으려합니다. 이것을 달성하기위한 bset 방법은 무엇입니까?정상적인 세션 만료에 영향을 미치지 않고 영구 세션 데이터를 Rails에 저장

  1. 스토어 세션 쿠키의 정보 :

    가 나는 두 가지 방법을 생각했습니다. 이 접근법의 문제점은 브라우저가 닫힐 때 사용자의 로그인 세션이 만료되지 않도록하는 부작용이있는 세션 쿠키에 만료 시간을 설정해야한다는 것입니다.

  2. DB에 정보를 저장하고 검색 키를 클라이언트 쪽의 쿠키에 저장합니다. 데이터를 검색하기 위해 추가 쿼리 및 일부 비 직렬화가 필요할 수 있으므로 성능 문제가 우려됩니다. 성능상의 이유로 인해 Rails가 ActiveRecordStore에서 기본 설정으로 전환 된 것처럼 보입니다. http://ryandaigle.com/articles/2007/2/21/what-s-new-in-edge-rails-cookie-based-sessions

이 작업을 수행하는 데 권장되는 방법은 무엇입니까?

답변

0

비 세션 쿠키를 사용하지 않는 이유는 무엇입니까? 클라이언트에서 지속되는 시간을 지정할 수 있습니다. http://api.rubyonrails.org/classes/ActionController/Cookies.html

사용자가 쿠키 데이터를 골치 거리는 경우에는 다음과 같은 기술을 사용하여 쿠키 데이터를 암호화 할 수 있습니다 (http://www.neeraj.name/blog/articles/834-how-cookie-stores-session-data-in-rails에서 가져옴) :

cookie_data = {:foo => "bar"} 
digest = 'SHA1' 
secret = 'my_encryption_secret' 
data = ActiveSupport::Base64.encode64s(Marshal.dump(cookie_data)) 
digest_value = OpenSSL::HMAC.hexdigest(OpenSSL::Digest::Digest.new(digest), secret, data) 
escaped_data_value = Rack::Utils.escape(data) 
final_output = "#{escaped_data_value}--#{digest_value}" 
cookies[:user_data] = final_output 

나중에는 쿠키 데이터를 읽을 수 있습니다 : 그것은 실제로 쿠키 기반 세션 저장소에 파일 기반 세션 저장소로 변경되었습니다

Marshal.load(ActiveSupport::Base64.decode64(cookies[:user_data])) 
0

-하지 액티브에서. 필자는 틀렸지 만 파일 기반 저장소가 기본값 인 경우 ActiveRecord가 웹 팜 또는 분산 된 설치에 대해 실행 가능한 옵션이라고 생각합니다. 쿠키 기반 저장소가 도입 된 이후 웹 팜 시나리오는 클라이언트 측에 저장되므로 문제가되지 않습니다. 오늘날 ActiveRecord는 각 요청에서 전송되는 데이터의 오버 헤드를 줄이려면 (ActiveRecord를 사용하면 session_id 만 전송한다는 의미) 쿠키가 허용하는 것보다 많은 양의 데이터를 저장하려는 실용적인 옵션입니다. 중앙 집중식 세션 설정이 필요합니다.

ActiveRecord 세션 저장소를 사용할 때 속도가 중요한 요소가 아님을 알았습니다. 쿠키 기반 세션에서는 일반적으로 세션 변수에 저장하는 내용을 제한하기 때문에 데이터베이스에서 데이터를 조회하는 데 사용되는 토큰 인 경향이 있습니다. 데이터가 세션 이상으로 지속될 필요가 없다면 어쨌든 관련 레코드에 대해 데이터베이스를 방문하기 때문에 토큰이 아닌 세션에 개체를 저장하는 것이 가능합니다. 검색하려는 객체가 값 비싼 검색 작업을 포함하고 세션의 수명 동안 세션을 필요로하는 경우, 토큰이 아닌 세션에 해당 객체를 저장하는 것이 좋으며 세션이 끝나면 db를 한 번만 친다 처음 설립되었습니다.

쿠키는 훌륭하지만 사용자가 암호화되었거나 삭제할 때 삭제할 수 있음을 기억하십시오. 개인 정보 보호에 대한 우려와 함께 조건부로 쿠키를 차단하는 브라우저 및 쿠키를 정리하는 브라우저에서 사용할 수있는 상당수의 플러그인을 사용하면 쿠키를 사용하는 것과 장단점을 비교하는 것이 좋습니다.

@joshsz는 세션 외에도 데이터를 지속시키기 위해 비 세션 쿠키를 사용하는 것이 좋은 지적입니다. 세션에는 유한 수명이 있음을 기억하십시오.

관련 문제