능력자들께 여쭙네요.ㅠ.ㅜ > 그누4 질문답변

그누4 질문답변

그누보드4 관련 질문은 QA 로 이전됩니다. QA 그누보드4 바로가기
기존 게시물은 열람만 가능합니다.

능력자들께 여쭙네요.ㅠ.ㅜ 정보

능력자들께 여쭙네요.ㅠ.ㅜ

본문

현재접속자 로직에서 데이터베이스상에 접속자를 작성하는 놈이 head_sub.php 라는 것을 알았습니다.
근데 궁금한게 있어서요.
디비 상에 회원로긴 하지않고 아이피만 걸려있을때 브라우저 위 오른쪽 닫기를 누르면
아이피가 사라집니다. 물론 디비 상의 레코드도 사라지죠.
물론 로긴상태서 브라우저 위 오른쪽 닫기를 누르면 당연히 디비 상의 레코드가 사라집니다.
근데 나가는 거를 업데이트 시키는 녀석도 head_sub.php인지 궁금하네요.
보통 접속자현황의 경우 로그아웃을 해야 레코드가 사라지는데 창을 닫아버리면 레코드가 그대로 남죠.
근데 레코드를 지우는 녀석이 누구인지. 그리고 어느 파일이 관여하는지 알고 싶습니다.
가르쳐 주세요. 꾸벅..
  • 복사

댓글 전체

음.. 우선, head_sub.php 라는 화일은 순정그누보드 화일이 아닙니다.

로긴이나 접속자 ip 저장/수정/삭제는, tail.sub.php 에서 일어납니다.

http://gnuboard.org/read/%EA%B7%B8%EB%88%84%EB%B3%B4%EB%93%9C/%EC%86%8C%EC%8A%A4%EC%BD%94%EB%93%9C/tail.sub.php#line10

일정 시간 (관리자화면에서 기본설정: 현재 접속자 에서 설정) 이 지나면, (그리고 누군가가 웹사이트에 접속을하면), 오래된 모든 로긴정보는 삭제됩니다.

http://gnuboard.org/read/%EA%B7%B8%EB%88%84%EB%B3%B4%EB%93%9C/%EC%86%8C%EC%8A%A4%EC%BD%94%EB%93%9C/tail.sub.php#line24
전진님 답변에 감사드립니다. 제가 잘못적었습니다.ㅠ.ㅜ head_sub.php -> tail.sub.php
위 소스도 살펴보았습니다.
그런데 궁금한 점은 회원이나 비회원이 로그아웃 할 경우에는 문제가 없는데
그냥 브라우저를 닫고 나가버리면 기록만 남는데
쿼런트 커넥트..php 에서 새로고침을 누르면 떠난사람들은 싹 지워버립니다.
이때 비회원이든 회원이든 떠난 사람들을 $_SERVER[REMOTE_ADDR] 명령문으로 잡는것 까진
알겠는데 어느 파일이 떠난사람을 g4_login 테이블에서 지우는 지 알고 싶네요.
한번더 수고좀요. ㅠ.ㅜ
넵 ^^

우선, 로그아웃 (bbs/logout.php) 에서 하는 일은, 세션정보를 지우는 일입니다.
말씀하시는 g4_login 테이블 내용은, tail.sub.php에서 일괄적으로 삭제합니다.
관련 기본 그누보드 로직은, 모든 그누보드 페이지에 포함되(야하)는 tail.sub.php에서
그누보드 페이지에 들어온지 일정시간 (g4_config 테이블 cf_login_minutes 필드) 이 지난 ip에 대해서 일괄적으로 삭제합니다. (line 25)

음.. 정리하면, g4_login 테이블은, (그 이름과는 달리) 로긴 기록을 남기는 곳이 아니라
그누보드의 어떤 페이지에 어떤 *아이피*가 접속했다는 정보 (로긴했으면 회원아이디도)를 관리하는 곳입니다.
그누보드 안에서 회원이든 비회원이든, 페이지를 이동할때마다, ip를 바탕으로 현재 위치를 수정합니다.
만일 그 ip가 (로그아웃을 하든 안하든) 다른 홈페이지로 나가거나, 브라우져를 닫게 되면, g4_login에는 그 ip가 마지막으로 접근했던 그누보드 페이지 위치와 시간이 남아있게 되죠.

만일 아무도 그누보드를 접근하지 않는다면 (그래서 tail.sub.php를 사용하지 않는다면) 그 ip의 기록은, 천년만년 ^^; 계속 남아있게 됩니다.
그러다 누군가가 그누보드 (어느) 페이지를 접근하면, tail.sub.php를 사용하게 되고, 그때, 오래된 접속기록을 g4_login 테이블에서 삭제합니다.

위에서 말씀하신 bbs/current_connect.php 를 새로고침하면, 이전 기록이 사라지는 이유는,
실제 과거 기록을 삭제하는 tail.sub.php가 bbs/current_connect.php의 맨 아래, 즉 화면에 이미 오래된 기록을 뿌려준 다음에 처리되기 때문입니다.

그래서 아무리 오래된 기록이라도, 적어도 한번은 보여준 후에 기록이 삭제되는 것입니다. ^^

도움이 되셨길 .. ^^
전진 고수님!
하나만 더 부탁드릴께요.
로그아웃시 logout.php는 세션정보를 지웁니다.
그런데 브라우져 오른쪽위에 X를, 즉 브라우져를 닫았을때 세션정보를 지우는 파일은 무엇인지
알고 싶습니다.
전진 고수님!! 한번더 부탁드립니다.
저는 고수가 아닙니다.. 저도 검색해서 답을 드릴때가 많아요.. ^^;

브라우져를 종료할때, 웹서버가 뭔가 할 수 있는 것은 없습니다.

무언가 (서버에서) 작업을 하려면, 서버에 신호를 보내야 하는데,
브라우져 종료는, 이런 것들과는 차원이 다른 '행동'입니다.
마치, 전화 통화중 중간에 끊어버리는 것과 같죠..  물론 현실에서는, 상대방이 '여보세요' 하면서 이쪽의 상황을 파악하려고 하여, 나름 판단 (로그아웃 했구나) 할 수 있지만,
웹은 계속 연결되어 있는 것이 아니고, 브라우져가 뭔가 요청할때마다 그 요청에 대답하고 그냥 끊어집니다. 한마디로 이쪽에서 제대로 작업 (로그아웃)을 하지 않으면, 웹서버는 이쪽의 상황을 알 수도, 알 필요도 없고요.. (이런 이유로, 서버에서 세션을 관리하면서, 누가 로그인 했구나.. 하고 관리하는 것이고요.. 음.. 서버에 따라서, 아무런 변동이 없이 얼마 시간이 지나면, 세션이 지워지기도 합니다.)

다른 종류의 웹에서도, 로그아웃 하지 않고 브라우져를 종료하는 것을 권장하지 않는 이유이기도 하고요.

음.. 아마 제가 이 글을 기억하고 새 댓글을 계속 체크하기 쉽지 않을것 같네요.
필요한 내용이 있으시면, 새글을 올리시거나, 쪽지를 주세요. ^^
© SIRSOFT
현재 페이지 제일 처음으로