브라우져 닫을떄 세션 학실히 죽이기(완전공략)
페이지 정보
작성자 MintState 댓글 0건 조회 12,004회 작성일 08-10-31 10:52본문
브라우져 닫을떄 세션 학실히 죽이기(완전공략)
안녕하십니까.
PHPER생활 3년차인 노의석입니다.
그사이 PHP3서부터 현재의 PHP4시리즈까지..
가장큰 변화는 바로 세션의 지원에 있었죠..그전까지는 변수사용의 편리, 빠른 처리효과밖에 없었던 PHP에 막강한 힘을 주었던 기능이죠. 사용하기 편리하고 기능적으로 쓸수 있었었는데...근데 요넘의것이 4.2 버젼 이후부터 죽질 않는겁니다.
그전까지의 지식과 작업내용을 완전히 뒤집는거죠..브라우져가 꺼지면 죽어야지 요놈이 지가 무슨 쿠키라고 게기면서 안죽는문제가 생겼습니다. 게다가 우리나라의 모모 호스팅업체들(이런 회사의 서버관리하시는분들 PHPER가 아니라 대학교에서 어려운(?) 서버 다루다 온분들이 많습니다.)은 새버젼 나왔다고 신나서 업그레이드들을 하죠...기능 파악도 못한체...그러니 우리같은 PHPER들은 황당한겁니다. 전에 짜놓은 수많은 알고리즘과 결제 프로그램등등...호스팅업체땜시 저도 날밤 깠습니다. (가X아라는 회사죠..거기 서버 담당하는 사람하고 무지 설전을 벌였습니다.
세션은 브라우져가 닫혀도 죽으면 안됀다나...-그럼 뭐하러 세션쓰냐..쿠키로 하지..쯥..)
어지됐었든 결국 성공했습니다. 여기 올린 글들을 읽고 만들어 봤는데...성공한게 하나도 없었습니다.. 하긴 세션,쿠키를 이용해서만 하려고 했으니...브라우져자체가 삐리한데 될리가 없더군요... IE5.5이전에는 어느정도 효과가 있으나 IE6.0에서는 설정을 바꿔주어도 잘 안될경우가 많더군요..
자 어러분! 편법일 수도 있읍니다..그러나 효과가 있을겁니다.
(소스)
믿기지 않게 간단하죠..? 알고리즘은 이렇습니다.
HTTP_REFERER은 바로 이전 사이트의 URL을 가져오는 함수입니다.
이 사이트에서 온것이 아니라면 죽이라는 겁니다.즉 다른 사이트나 새브라우져로 들어왔을 경우를 말한다.
사이트에 맨첨에 들어갈땐 로그인이 되지 않은 상태죠? 그러니 default로 session을 죽입니다. 그러니 사이트 안에서 돌아다닐때는 세션 제한시간에 걸리지 않는한 맘껏 돌아다닐수 있습니다. 그러나 다른사이트로 가거나 브라우져를 껏다가 다시 들어 가면 세션을 죽이는 겁니다. 만약 특정사이트에서는 접속해도 된다면 IF문을 수정해주면 돼겠죠?
전 세션을 쓰는 페이지가 넘 많아서 위의 스크립트를 화일로 만들어 require시켜서 씁니다.
참 화일로 만드실때는 session_start();는 넣으시면 안됍니다.해당 페이지에 넣어야 합니다.
아..그리고 오픈창이나 자동으로 넘어가는 스크립트(window.location,parent.location등등) 에서는 HTTP_REFERER값이 안올수 있습니다. 그럴땐 그 스크립트(window.location,parent.location등등) 나오기전에 플래그값을 하나 넣어주세요..
(소스2)
이런식으로 해주시면 잠시 페이지 이동할때만 auto값을 이용해서 같은 사이트라는걸 확인하고 바로 지워주시면 됩니다. 간단하죠? 때로는 많은 기능과 화려한 함수들을 집약하는게 기술이고 실력일수 있지만 간단하면서 확실한 알고리즘은 더더욱 오랫동안 빛을 바란다는 사실을 새삼 느꼈습니다..
잘 안돼시면 욕해주시고 성공하시면 같은 PHPER인 저 '노의석'이름석자만 기억해주세요.
그럼 즐플~~~~
안녕하십니까.
PHPER생활 3년차인 노의석입니다.
그사이 PHP3서부터 현재의 PHP4시리즈까지..
가장큰 변화는 바로 세션의 지원에 있었죠..그전까지는 변수사용의 편리, 빠른 처리효과밖에 없었던 PHP에 막강한 힘을 주었던 기능이죠. 사용하기 편리하고 기능적으로 쓸수 있었었는데...근데 요넘의것이 4.2 버젼 이후부터 죽질 않는겁니다.
그전까지의 지식과 작업내용을 완전히 뒤집는거죠..브라우져가 꺼지면 죽어야지 요놈이 지가 무슨 쿠키라고 게기면서 안죽는문제가 생겼습니다. 게다가 우리나라의 모모 호스팅업체들(이런 회사의 서버관리하시는분들 PHPER가 아니라 대학교에서 어려운(?) 서버 다루다 온분들이 많습니다.)은 새버젼 나왔다고 신나서 업그레이드들을 하죠...기능 파악도 못한체...그러니 우리같은 PHPER들은 황당한겁니다. 전에 짜놓은 수많은 알고리즘과 결제 프로그램등등...호스팅업체땜시 저도 날밤 깠습니다. (가X아라는 회사죠..거기 서버 담당하는 사람하고 무지 설전을 벌였습니다.
세션은 브라우져가 닫혀도 죽으면 안됀다나...-그럼 뭐하러 세션쓰냐..쿠키로 하지..쯥..)
어지됐었든 결국 성공했습니다. 여기 올린 글들을 읽고 만들어 봤는데...성공한게 하나도 없었습니다.. 하긴 세션,쿠키를 이용해서만 하려고 했으니...브라우져자체가 삐리한데 될리가 없더군요... IE5.5이전에는 어느정도 효과가 있으나 IE6.0에서는 설정을 바꿔주어도 잘 안될경우가 많더군요..
자 어러분! 편법일 수도 있읍니다..그러나 효과가 있을겁니다.
(소스)
<? session_start(); if(!eregi('abc.com',$HTTP_REFERER)) //abc.com이란 사이트일 경우 { session_destroy(); } ?>
믿기지 않게 간단하죠..? 알고리즘은 이렇습니다.
HTTP_REFERER은 바로 이전 사이트의 URL을 가져오는 함수입니다.
이 사이트에서 온것이 아니라면 죽이라는 겁니다.즉 다른 사이트나 새브라우져로 들어왔을 경우를 말한다.
사이트에 맨첨에 들어갈땐 로그인이 되지 않은 상태죠? 그러니 default로 session을 죽입니다. 그러니 사이트 안에서 돌아다닐때는 세션 제한시간에 걸리지 않는한 맘껏 돌아다닐수 있습니다. 그러나 다른사이트로 가거나 브라우져를 껏다가 다시 들어 가면 세션을 죽이는 겁니다. 만약 특정사이트에서는 접속해도 된다면 IF문을 수정해주면 돼겠죠?
전 세션을 쓰는 페이지가 넘 많아서 위의 스크립트를 화일로 만들어 require시켜서 씁니다.
참 화일로 만드실때는 session_start();는 넣으시면 안됍니다.해당 페이지에 넣어야 합니다.
아..그리고 오픈창이나 자동으로 넘어가는 스크립트(window.location,parent.location등등) 에서는 HTTP_REFERER값이 안올수 있습니다. 그럴땐 그 스크립트(window.location,parent.location등등) 나오기전에 플래그값을 하나 넣어주세요..
(소스2)
<? auto=1; session_register("auto"); ?> <script>window.location='abc.com/123.htm';alert('자동으로 이동합니다.')</script> //************123.htm***********// <? if(!eregi("kkamzzik.com",$HTTP_REFERER)&&!$auto) { session_destroy(); } session_unregister("auto"); ?>
이런식으로 해주시면 잠시 페이지 이동할때만 auto값을 이용해서 같은 사이트라는걸 확인하고 바로 지워주시면 됩니다. 간단하죠? 때로는 많은 기능과 화려한 함수들을 집약하는게 기술이고 실력일수 있지만 간단하면서 확실한 알고리즘은 더더욱 오랫동안 빛을 바란다는 사실을 새삼 느꼈습니다..
잘 안돼시면 욕해주시고 성공하시면 같은 PHPER인 저 '노의석'이름석자만 기억해주세요.
그럼 즐플~~~~
|
댓글목록
등록된 댓글이 없습니다.