Ruby on Rails 세션에서 단일 항목을 어떻게 지우나요?
-
22-08-2019 - |
문제
Ruby on Rails에서 할 때 session[:foo] = nil
항목이 이름을 남깁니다 :foo
세션 객체에서. 세션 객체에서 그 단일 항목을 어떻게 제거 할 수 있습니까?
해결책
실제로 세션에서 값을 삭제하는 방법이 있습니다. Richh가 말했듯이 세션 변수는 CGI :: 세션 인스턴스입니다. 같은 것을 입력 할 때 session[:foo]
실제로 그 기호를 a @data
세션 객체의 인스턴스 변수. 해당 데이터 변수는 해시입니다.
편집하다: CGI :: 세션 클래스에는 데이터 인스턴스 변수가 있습니다. 당신이 가면 문서 그리고 소스 코드를보십시오 []=
방법이 있음을 알 수 있습니다 @data
회원.
그래서 삭제합니다 session[:foo]
당신이해야 할 일은 액세스하는 것입니다 @data
세션 내부에서 변수
session.data[:foo]
이제 삭제하려면 :
session.data.delete :foo
이 작업을 수행하면 세션 변수에 더 이상 foo가 없어야합니다.
다른 팁
그것은처럼 보인다 가장 간단한 버전이 작동합니다. 모든 상점 (쿠키, 파일, activerecord, ...) 사용 AbstractStore::SessionHash
데이터가 포함 된 객체로서 다른 매장은로드하고 저장하는 수단 만 제공합니다. AbstractStore::SessionHash
인스턴스.
AbstractStore::SessionHash
상속 Hash
, 그래서 이것은로 변합니다 Hash#delete
방법:
session.delete(:key_to_delete)
세션은 루비입니다 CGI :: 세션 해시가 아니라 Delete 호출은 실제로 세션을 삭제합니다. 삭제는 매개 변수를 가져 가지 않습니다 - 이것은 당신이 Hyuan의 제안을 시도 할 때 "잘못된 인수 (1 또는 0)"메시지를 받고 있습니다.
세션 입력을 지우는 일반적으로 허용되는 방법은 세션 [: foo] = nil입니다. 이상적이지 않지만 세션 [: foo] .nil과 같은 진술은? 예상대로 작동합니다.
나는 그것이 일반 해시처럼 행동하기를 정말로 원하지만 ... 그렇지 않습니다.