현재접속자의 증가문제.[다중접속] > 그누3질답

그누3질답

현재접속자의 증가문제.[다중접속] 정보

그누보드 현재접속자의 증가문제.[다중접속]

본문

현재 323버전을 사용하고 있구요.
현재 접속자를 현황을 sir 처럼 해보려고 적용중인데요. 한가지 문제가 발생했습니다.

리프래쉬를 하거나 다른 페이지를 열어볼경우 계속적으로 접속자 수가 증가를 합니다.
접속자 리스트를 보면 같은 아이디나 아이피로 다중접속중인 표시가 나오네요.


현재 config.php 에서는 $cfg[login_minutes] = 5; // 분(설정값) 이내의 접속만 현재 접속자로 인정
이렇게 설정해놓은 상태이구요. 설정시간이 지나면 원래대로 1명이 나오고 다시 똑같은 현상이네요.
다른 부분은 정말 모르겟네요.

<?
if (!defined("_GNUBOARD_")) exit; // 개별 페이지 접근 불가
define("_DOCTYPE_", "DESIGN");
$html_title = "현재접속자";
include "./bbs/gblayer.php";
?> <p>  <TABLE width=100% cellpadding=4>
<?
include "./bbs/gblayer.php";
$sql = " select a.mb_id, b.mb_name, b.mb_icon, b.mb_email, b.mb_homepage, b.mb_open, a.lo_ip, a.lo_location
          from $cfg[table_login] a left join $cfg[table_member] b on (a.mb_id = b.mb_id)
          where IFNULL(b.mb_level,0) < '$cfg[level_max]'
          order by a.lo_datetime desc ";
$result = sql_query($sql);
for ($i=0; $row=mysql_fetch_array($result); $i++) {
    if ($row[mb_id]) {
        $mb_name = gblayer($row[mb_id], $row[mb_name], $row[mb_email], $row[mb_homepage], $row[mb_open]);
    } else {
        if ($member[mb_level] >= $cfg[level_max]) {
            $mb_name = $row[lo_ip];
        } else {    // 관리자가 아니라면 IP 주소를 감춘후 보여줍니다.
            $mb_name = preg_replace("/([0-9]+).([0-9]+).([0-9]+).([0-9]+)/", "\\1.♡.\\3.\\4", $row[lo_ip]);
        }
    }
?>
<tr>
    <td width=140><?=$i+1?>. <?=$mb_name?></td><td style='color:#575757;'><?=htmlspecialchars($row[lo_location]);?></td>
</tr>
<? } ?>
</table>

위 소스는 member.php의 내용입니다.

현재접속자 표시 부분. --->이건 TOPMENU.PHP에 들어 잇는 내용입니다.
<!-- 현재 접속자 -->
<?
$sql = " select COUNT(*), SUM(IF(mb_id<>'',1,0)), SUM(IF(mb_id='',1,0)) from $cfg[table_login] ";
$row = sql_fetch($sql);
?>
<a href='./?doc=member.php'>
현재접속자 : <? echo "{$row[0]}명 (회원{$row[1]}/손님{$row[2]})";?></a>

성길님이 도움주셔서 로케이션 문제는 해결됬는데 다중접속이 걸리네요....
그럼 해결책좀 부탁드립니다.
그럼 좋은 하루되시구요^^*

댓글 전체

해결 하셨군요... 다행^^

위에 primary키 설정안되신건.... 이미 중복된 아이피가 등록이 되있었기 때문...
중복된아이피 삭제하시고 하셨어야...

근데... 사실.. 삭제하기도 만만찮은...(전 삭제 실패 ㅠㅜ)
이럴때 primary키가 있었어야... "저걸 삭제해"라구 할텐데... 그게 없으니... 꼭 집어 "어떤걸 지워"라구 할수가 없으니...
삭제하기 위해선 primary필요하구... primary 위해선 삭제가 필요하구... -_-;;;

실험해본다구 primary지웠다가... 한참 고생.... 결국.... 아예 테이블 비우고서야 회복 가능...

테이블 삭제가... 탁월한 선택이셨던듯...
완두콩님 지적대로 lo_ip문제였나부네요. 테이블을 삭제하고 다시 만들어서 프라이머리 키값을 설정하니까 정상 작동합니다. ^^*
성길님과 완두콩님께 감사 드려요~~~ ^^*
넘 감사....^^*  여직 여기저기 뒤지면서 헤매고 있었네요.
지금 해보니 Mysql서 primary키가 설정안되서 계속 같은 아이피로 추가기록이 되는것 같네요. 님이 말씀하신대로 "Duplicate entry '203.♡,♡..181' for key 1" 이런 글이 뜨네요
-----------------------------------------------------------
Query    ALTER TABLE gb_login CHANGE lo_ip lo_ip VARCHAR(15) NOT NULL
            ALTER TABLE gb_login DROP PRIMARY KEY
            ALTER TABLE gb_login ADD PRIMARY KEY( lo_ip )
Result    Duplicate entry '211.230.62.76' for key 1

Add Field | View Data
---------------------------------------------------------
primary키로 변경이 안되는 어떻게 해야할가요? 또 질문하네요 ㅠㅠ
(덮어쓰기로 버전업뎃을 하는 과정에 문제가 있었나부네요 ....)
혹시 gb_login 테이블의 lo_ip 필드가 primary key로 설정되지 않은건 아닌지요?

---- 이하 잡담 & 추측 난무 ---
(매번 이런식으로 쓸모없는 소리 덧붙인다구 혼나게 되는건 아닐지... -_-a )

원래 lo_ip가 primaryKey라서 같은 ip로는 두개는 기록이 안되는듯한데요...
Mysql 에서 "Duplicate entry '203.♡,♡..181' for key 1" 이런식으로 에러나거든요...
아래쪽 글에 올리셨던 mysql 내용보면 키값은 없는듯 보이는데...
primary키가 설정안되서 계속 같은 아이피로 추가기록이 되는게 아닐까 합니다..

그누 index.php 저아래 귀퉁이에 lo_location 추가 하는 부분이 붙어 있는데...
------------------
$sql = " insert into $cfg[table_login]
            set lo_ip = '$HTTP_SERVER_VARS[REMOTE_ADDR]',
      중략...";
$result = @mysql_query($sql);
if (!$result) { // 오류가 발생한다면 UPDATE 함
    $sql = " update $cfg[table_login]
    중략...
              where lo_ip = '$HTTP_SERVER_VARS[REMOTE_ADDR]' ";
    @mysql_query($sql);
}
---------------------
일단 insert 하고... insert 오류나면 같은 ip 있는곳에서 update하고...

update하는 부분이 홈에서 실제 실행되고 있는지 체크해봄직...

제가 primary key에 대한 제대로된 이해가 없어서......
(아니... sql 이란 놈이 워낙 어려운놈이라 ㅡ,.ㅡ)
그냥 추측입니다... (--)(__)
노프레임으로 작업중입니다.그리고 member.php가 접속자 현재위치를 표시하는 페이지 입니다. 보드 패치를 잘못한건지 ㅠㅠ. 해결이 안되네요.
전체 9,564
그누3질답 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1402호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT