CI 묻고 답하기

제목 세션 삭제 후 뒤로가기 문제
글쓴이 Jeremy 작성시각 2011/04/23 12:10:30
댓글 : 3 추천 : 0 스크랩 : 0 조회수 : 40465   RSS
 안녕하세요. 제가 초보라서 또 질문을 ㅜㅜ 죄송합니다;;;;;
제가 로그아웃을 하고 뒤로가기 버튼을 눌렀더니 바로 전 페이지들이 그냥 보여지더라구요.
로그인체크(세션체크)는 gwangpa님이 올려주신 '로그인 체크 자동화'라는 글 읽고 그대로 했습니다.
한마디로 후킹을 이용해서 post_controller_constructor로 세션을 체크했지요.

로그아웃하고 나서 뒤로가기 버튼을 눌렀을때 제 예상으로는 후킹이 먹혀서 세션체크를 하고 세션이 삭제 되고 없으니 로그인 화면으로 redirect가 되겠구나 했는데 그 전 페이지들이 여과없이 다보이더군요 ㅡㅡ;; 물론 새로고침을 하면 후킹이 먹혀서 로그인 페이지로 갑니다. 문제가 로그아웃을 해도 뒤로가기를 했을때 캐시 때문에 브라우져가 컨트롤러를 안사용하고 전에 저장된 페이지를 그냥 보여주는 거 같더라구요. 그래서 다음과 같이 노캐싱을 했더니 그 때부터 정상 작동 하더라구요.
header("Last-Modified: " . gmdate( "D, j M Y H:i:s" ) . " GMT"); // Date in the past 
header("Expires: " . gmdate( "D, j M Y H:i:s", time() ) . " GMT"); // always modified 
header("Cache-Control: no-store, no-cache, must-revalidate"); // HTTP/1.1 
header("Cache-Control: post-check=0, pre-check=0", FALSE); 
header("Pragma: no-cache"); 
여기서 질문
1. 제가 하는 방법이 정상인가요? 많이들 이렇게 하시는지?
2. 모든 뷰페이지에서 캐싱을 안쓴다는게 찝찝합니다. 왠지 매번 페이지 부를때마다 새로 데이터를 받아오는 기분?이라서요..근데 이때 제가 위에서 한 노캐시 방법은 페이지 로딩속도에 영향을 미치는 지요? 제말은 뷰페이지에 있는 여러 그림파일이나 쿼리도 캐싱이 안되고 매번 새로 불러오게 되는 건가요?

답변부탁드립니다 (꾸뻑..)
주말이군요 좋은 주말보네세요
감사합니다.
 다음글 twitpic api upload (2)
 이전글 form 헬퍼에 set_value 적용에 대해 여쭤봅니... (1)

댓글

변종원(웅파) / 2011/04/26 18:30:45 / 추천 0

1. 예전에 저렇게들 많이 썼습니다. 보안문제때문에 뒤로가기 했을때 페이지가 제대로 나타나지 않도록 하는 것이 맞습니다. (포럼도 로그아웃후 뒤로 가기했을때 댓글을 다시 쓸수가 있었네요. 화면에는 보이지만
댓글을 쓰지못하도록 수정을 했습니다. 감사합니다.)

2. 브라우저에서 캐시를 사용하도록 한다면 화면에는 로그인된 것처럼 보이지만 실제 액션에서 (글쓰기, 댓글쓰기, 삭제 등등) 세션이 있는지 검사하고 처리하시면 캐시도 쓰고 액션도 막을 수는 있습니다.
다만 좀 찜찜하기는 합니다.

매뉴얼의 redirect 를 보니 답이 있네요. redirect의 파라미터로 refresh를 사용하거나
redirect전에 set_header()함수로 위의 헤더들을 몇몇 필요한 페이지에서만 사용하면 될것 같습니다.
-> 로그인이 되어야 액션을 취할 수 있는 페이지..
redirect에 두번째 파라미터를 안쓰면 디폴트가 location입니다. 이 경우는 뒤고가기시 캐시를 사용합니다.
두번째 파라미터로 refresh를 사용하면 header("Refresh:0;url=".$uri); 이렇게 되어서 로그아웃 상태가 아닌
로그인으로 나옵니다.  

Jeremy / 2011/04/28 07:14:42 / 추천 0

웅파님 자세한 답변 감사드립니다. 많은 도움이 되었어요~

느림보 / 2012/01/13 10:51:16 / 추천 0
저는 생성자를 만들어서 거기에 노 캐쉬를 넣었는데 이것도 서버에 부하를 주나요??ㅎ