여기 시나리오가 있습니다. 웹 서퍼 (방문자)는 웹 사이트의 구매 페이지에 있습니다. 이 페이지에서 방문자는 새로운 사용자 등록 세부 정보, 신용 카드 정보를 입력하고 구매를 완료 할 수 있으며 동시에 새 사용자를 만들거나 기존 계정으로 로그인 할 수 있습니다. 방문자가 기존 계정을 사용하여 로그인하려면 새 세션을 만든 후에 동일한 구매 페이지로 리디렉션되어야합니다. 세션 [: pchase_page_after_login] = true 및 세션 [: path_purchase_page] = path_of_current_page의 두 세션 변수를 사용하여이 작업을 수행 할 수있었습니다. 로그인이 끝나면이 varialbes를 nil로 만듭니다.
사용자가 구매 페이지에서 로그인하면이 모든 작업이 잘됩니다. 그러나 사용자가 구매 페이지에서 다른 페이지로 이동하면이 두 세션 변수는 여전히 세션에 저장되며 0이 아닙니다. 따라서 다른 몇 페이지를 횡단 한 후 방문자가 로그인을 시도하면 세션 [: pchase_page_after_login] = true 및 세션 [: path_purchase_page] =과 같은 구매 페이지로 리디렉션됩니다. 따라서 특정 세션 변수가 다음 요청 내에서만 사용 가능하게하는 방법이 있는지 알고 싶습니다. 의 콘텐츠를 알고 있습니다 : 플래시은 다음 요청시에만 사용할 수 있지만이 용도로 사용하는 것이 현명한 방법인지는 알 수 없습니다. 세션 변수가 더 적합하지만이 두 세션 변수를 다음 요청에만 사용할 수 있습니다. 이것을 달성 할 수있는 방법이 있습니까? 미리 감사드립니다.세션 변수를 다음 요청까지만 사용 가능하게 설정하십시오.
0
A
답변
2
내가 권장하는 것은 필터를 사용하기 전에 이것을 사용하는 것입니다. 예를 들어, 다음 작업을 수행 할 수 있습니다 :
class ApplicationController
before_filter :delete_session_purchase
protected
def delete_session_purchase
session.delete :path_purchase_page
session.delete :purchase_page_after_login
end
end
class SessionsController
skip_before_filter :delete_session_purchase, :only => [:new, :create]
end
이것은 당신이 구매 페이지로 사용자를 리디렉션 세션 변수를 제거 할 정규 요청 것을 의미하지만, 로그인 행동에 당신의 주위에 이러한 변수를 유지한다. 이렇게하면 정상적인 상황에서 세션 변수를 지우려는 경우를 제외하고는 세션 변수가 단순히 삭제됩니다.
1
이 경우 flash
을 원하십니까? 그것은 세션에 저장되어 있지만 다음 요청 후에 자동으로 nill됩니다. 맞춤 솔루션은 플래시가 이미 수행 한 것을 효과적으로 복제하게됩니다.
로그인 후 redirect_to :back
으로 로그인하면 로그인 한 페이지로 돌아갑니다.
관련 문제
- 1. Sinatra의 세션 : 변수를 전달하는 데 사용
- 2. Codeigniter - 뷰에 변수를 설정하십시오.
- 3. 변수를 3 진수로 설정하십시오.
- 4. SELECT 문에 변수를 설정하십시오.
- 5. 프롤로그에서 매개 변수를 동적으로 설정하십시오.
- 6. 외부 bash에서 환경 변수를 설정하십시오.
- 7. root.php의 경로 변수를 올바르게 설정하십시오.
- 8. 함수의 반환 유형에 변수를 설정하십시오.
- 9. 내보기에서 세션 변수 사용
- 10. 클래스에서 세션 사용
- 11. PHP에서 세션 변수를 유지
- 12. MVIEW "쿼리 재 작성을 가능하게"사용
- 13. outputcache 또는 세션 변수를 사용하십시오.
- 14. 사용자가 날짜를 변경하지 않으면 변수를 설정하십시오.
- 15. 형식 인수에서 형식 매개 변수를 설정하십시오.
- 16. 입력 (유형 = 텍스트)에 값이있는 경우 select 요소를 사용 가능하게 설정하십시오.
- 17. PHP가 세션 변수를 업데이트하지 않으십니까?
- 18. 변수를 다음 함수에 적용
- 19. 사용자가 PHP 세션 시간 제한을 설정하십시오.
- 20. ASP.NET MVC에서 세션 상태 사용
- 21. perl에서 PHP 세션 변수 사용
- 22. Javascript : attr 줄에서 작동하도록 변수를 설정하십시오.
- 23. 사용 후 세션 변수 지우기
- 24. PHP5 클래스에 대해 '.equals'를 사용 가능하게 함
- 25. 사용 위치를 사용하여 tbody를 스크롤 가능하게 만들기 :
- 26. CodeIgniter에서 세션 라이브러리 사용
- 27. MySQL : 필드를 다음 절의 위치로 설정하십시오.
- 28. 변수를 지정한 다음 변수에 변수를 사용합니까?
- 29. 자바 : 세션 속성은 다음 작업
- 30. GAE/J에서 세션 사용
감사합니다. 코드가 매력처럼 작동합니다. 나는 그것의 대부분을 이해했다. 당신이 설명하기를 원할 것인가? skip_before_filter에서만, 그리고이 모든 것이 어떻게 작동 하는가? – rookieRailer
그래, 유일한 부분은 세션 컨트롤러에서 새 작업 또는 생성 작업이 호출 될 때 before 필터 (delete_session_purchase 함수) 만 건너 뛰어야한다는 것입니다. 실제 before 필터가 실행되면 세션 [: path_purchase_page] 및 세션 [: purchase_page_after_login]이 삭제되어 정상적인 상황에서는 리디렉션이 발생하지 않습니다. –
좋아요, 어떻게 작동하는지 이해합니다. 이 두 세션 변수의 삭제는 sessioncontroller의 new 및 create 액션에서 발생하지 않습니다. 그리고 세션 변수는 "로그인"요청을 몇 번 보내더라도 삭제되지 않은 채로 남아 있지만 사용자는 이미 로그인 페이지에 있으므로이 것은 중요하지 않습니다. 이것은 아름다운 논리입니다. 감사. – rookieRailer