2011-03-31 4 views
5

Rails는 세션 테이블에서 레코드를 언제 삭제해야하는지 어떻게 알 수 있습니까?레일즈는`sessions` 테이블에서 레코드를 언제 삭제할 수 있는지 어떻게 알 수 있습니까?

예를 들어, 사용자가 웹 사이트를 방문하면 세션 레코드가 만들어 지지만 사용자가 브라우저 창을 닫으면 서버가 알림을받지 못하게되므로 레일스는 세션 테이블에서 레코드를 어떻게 삭제합니까?

답변

3

내 이해를 위해 세션 만료 구현을 제공해야합니다.

This API page은 어떻게 작동하는지 꽤 괜찮은 답변을 제공합니다. created_on 및 updated_at이라는 추가 속성을 사용하여 데이터베이스 테이블을 만든 다음 (무료로 타임 스탬프를 얻음) updated_at 속성을보고 언제든지 만료되도록 작업을 만들 수 있습니다.

This post에는 작업 실행 방법에 대한 세부 정보가 있습니다.

ActiveRecord::SessionStore::Session.delete_all(["updated_at < ?", 12.hours.ago]) 

당신은 컨트롤러에서 일부 작업 후를 호출 할 수있는 코드의이 작품은 모든 죽은 세션을 죽일 :

7

는 더 간단 방법이 있습니다.

물론 논란의 여지가 있지만 가장 단순합니다.

Full story

+1

은 정말 cronjob에에서처럼, 비동기 적으로 그런 일을 할 것입니다. – Dogweather

+1

이것은 잘 작동하고, 언제나 보석과 함께 레일 러너를 통과하여 크론 작업으로 만듭니다. – Rystraum

+0

우리는 비슷한 문제가 있었고 cron을 통해이를 실행하고 싶었 기 때문에 MySQL 이벤트 (http://dev.mysql.com/doc/refman/5.5/en/create-event.html)를 실험하고 있습니다. 바라건대 다른 사람들이 같은 일에 뛰어 드는 데 도움이되기를 바랍니다. –