문제

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과 같은 진술은? 예상대로 작동합니다.

나는 그것이 일반 해시처럼 행동하기를 정말로 원하지만 ... 그렇지 않습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top