336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

언제부터선가 session을 사용하게 되었습니다.


그런데 또 언제서부턴가, form에서 전송후, Back을 하게 되면,


form을 재전송하지 않는다는, 백지 화면이 뜨더군요.


처음에는 원인조차 파악하지 못하다가, 최근에야 그 이유와 해결책을 알아내었습니다.




보통 session을 사용하실때, session_start() 함수를 사용하게 됩니다.


저같은 경우는 공통 헤더 파일의 상단에 이 함수를 자동으로 실행하게 해놓습니다. 물론 php.ini 셋팅을 통해 자동으로 실행되게 할 수도 있지만,


서버간의 프로그램 이식성을 위해 저같은 경우엔 프로그램 레벨에서 실행해 줍니다.


php.ini에 보시면 요런 부분이 있습니다.




session.cache_limiter = nocache ; set to nocache,private,public} to




이건 세션이 스타트될때 참고되는 부분중 하나입니다.


제 서버의 경우엔 기본값이 nocache로 되어 있습니다.


nocache의 경우엔, 브라우저에 캐슁돼지 않는 것은 기본이고, form도 재전송되지 않습니다.


그래서 form을 전송하고 난 후의 페이지에서 history.back()을 할경우, 하얀 화면이 나오는 것입니다.


그러면 어떻게 해줘야 하냐구요..




php.ini의 윗 구절을 자세히 보시면, cache_limiter를 세가지로 셋팅할 수 있다고 되어 있습니다. "nocache", "private", "public"...


document를 찾아보니..




Setting the cache limiter to nocache, for example, would disallow any client-side caching.


A value of public, however, would permit caching. It can also be set to private, which is slightly more restrictive than public.




"public"은 브라우저 캐슁을 허용하는 것이고, "private"는 public과 거의 유사하지만, 조금더 제한적이라고 하고 있습니다.


실제 이용을 해본결과, 저는 둘의 차이를 이해하지 못하겠습니다.


근데 이 둘을 이용할 경우에, history.back() 문제는 해결되지만, 반대로 정말 캐슁이 잘되어, 내용이 변하질 않습니다.


환장할 노릇이지여~~




이곳 저곳을 쑤시고 다니고, 모두 테스트 해본 결과,,


그 답을 찾았습니다.




바로 'nocache, must-revalidate' 입니다.




이것은 캐싱은 허용하지 않되, form은 재전송할 수 있도록 한다는 것입니다.




이걸 사용해본 결과, 현재 일주일정도 테스트해봤는데, 다이나믹 컨텐츠의 경우 컨텐츠도 잘 변경되고, form 전송시에서 back이 아주 잘됩니다.


cache_limiter는 php.ini에서 셋팅하지 않고 함수호출로도 사용할 수있습니다.


session_cache_limiter('nocache, must-revalidate');


이렇게 해주면 , php.ini에 셋팅한 것과 동일한 효과를 나타냅니다. 아까도 말씀드렸지만, 서버간에 서로 셋팅이 다를 수 있어서, 저는 소프트웨어 레벨에서 이런 문제점들을 다루려고 최대한 노력합니다.




저 함수를 반드시 session_start() 전에 호출해 주어야만 적용이 됩니다.


그런데 간혹, form 재전송도 허용하지 않아야 할때가 있습니다. 즉 완전 nocache 해주어야 할 때가 있다는 것이죠..




예를 들면, 쇼핑몰 등에서 결제 정보 입력 페이지 등은, 보안상의 이유나 중복 결제 방지를 위해서 form을 재전송해서는 안되는 경우입니다.




이럴때는 cache_limiter를 nocache로 셋팅합니다.




이런것들을 융통성있게 할 수 있도록 다음과 같은 방법을 저는 사용합니다.




이건 제가 공통으로 프로그램파일의 젤 상단에 포함시키는 헤더 파일의 일부분입니다.


if($SESSION_CACHE_LIMITER){


session_cache_limiter($SESSION_CACHE_LIMITER);


} else {


session_cache_limiter('nocache, must-revalidate');


}


session_start() ;




이렇게 해서 기본값은 폼 재전송을 허용하도록 하고, 특별하게 셋팅할 경우가 있을때에는, 이 헤더파일을 포함시키기 전에, $SESSION_CACHE_LIMITER라는 변수에 값을 대입시켜 줍니다.


많은 도움이 되시길 바라면..


출처 : PHPSCHOOL , shellbru님의 글

'IT > PHP' 카테고리의 다른 글

PHP XSS filter function  (0) 2015.04.20
php-mysql 개행 적용.  (0) 2015.04.03
PHP Server 변수. $_SERVER  (0) 2015.03.12
PHP 파일 업로드 ( input type file )  (0) 2013.07.19
php $_SERVER, $_Server  (0) 2013.07.19
Posted by 당양부부34

블로그 이미지
주요 토렌트를 블로깅하고 있습니다. 토렌트 순위 등은 다른 사이트를 찾아보세요. 주요 웹툰 순위도 게재했어요 경제를 좋아하는 일산의 행복한 프로그래머입니다.
당양부부34
Yesterday
Today
Total

달력

 « |  » 2024.4
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30

최근에 올라온 글

최근에 달린 댓글

최근에 받은 트랙백

글 보관함