레일에서 세션을 비우거나 파괴하는 방법?


답변:


203

모든 것을 지우려면 컨트롤러에서 reset_session 메소드를 사용하십시오.

reset_session

이 방법에 대한 설명서는 다음과 같습니다. http://api.rubyonrails.org/classes/ActionController/Base.html#M000668

저장된 모든 개체를 지우고 새 세션 개체를 초기화하여 세션을 재설정합니다.

행운을 빕니다!


1
데이터베이스 기반 세션 (아마도 사용해야 함)의 경우 쿼리를 통해 만료 될 수 있습니다. guides.rubyonrails.org/security.html#session-expiry
m33lky

44

rails의 session은 해시 객체입니다. 따라서 해시 지우기에 사용 가능한 모든 기능은 세션에서 작동합니다.

session.clear

또는 특정 키를 폐기해야하는 경우 :

session.delete(key)

레일 3.2에서 테스트

추가

사람들이 언급 한 session={}것은 나쁜 생각입니다. 관련하여 session.clear, Lobati 그것은이 session.clear가하는 것 이상으로 다른 청소를하지 당신이 더 나은 [session.clear보다] reset_session를 사용하여 떨어져 아마 것처럼 보이는 의견 -. 내부적으로 reset_session는 session.destroy 호출 , 그 자체가 아니라 다른 물건을 명확 호출합니다.


이 방법의 장점과 Gdeglin이 권장하는 방법에 대한 의견이 있습니까?
Peter Berg

3
다른 매개 변수는 유지하지만 하나의 특정 키 값 쌍을 삭제하려는 경우에 사용할 수 있습니다.
Lavixu

1
이것은 세션을 전혀 재설정하지 않고 지역 변수를 할당합니다. 이 기술을 사용하여 세션을 재설정하지 마십시오. session = {}
alexspeller

4
5.1 세션 액세스Rails 문서 는 스크립트 삽입 키 / 값 쌍 (예 : 컨트롤러에서 삽입 된 것)을 제거하고 새 세션을 생성하려는 경우 reset_session을 사용하는 것이 좋습니다. 설정 한 키 / 값 쌍만 재설정하려면 해당 키를 nil로 설정하십시오.
sargas

1
@barlop 아마도 reset_session다른 것을 정리하는 것보다을 사용하는 것이 더 나을 것 같습니다 session.clear. 내부적으로 reset_session호출session.destroy 하는 자체가 호출 clear다른 물건뿐만 아니라 .
lobati

6

사용자 세션을 삭제하려면

session.delete(:user_id)

데이터베이스에서 사용자 레코드를 삭제할 수 있습니다.
Arthur

2
@Arthur 사실이 아닙니다. 그러나 세션에서 : user_id 키만 삭제하고 전체 세션은 삭제하지 않습니다.
Andión

5

특정 매개 변수 만 지우려면 다음을 사용할 수 있습니다.

[:param1, :param2, :param3].each { |k| session.delete(k) }

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