현재접속자수 정확성 문제... 정보
현재접속자수 정확성 문제...본문
tail.sub.php에서
현재접속자 소스를 보니 페이지를 열때마다 현재접속자의 로그인시간과 아이피정보를 갱신하더군요
그런데 아래 소스를 실행하는 싯점이 문제가 잇는거 같습니다
---------------------------------------------------------------
// 시간이 지난 접속은 삭제한다
sql_query(" delete from $g4[login_table] where lo_datetime < '".date("Y-m-d H:i:s", $g4[server_time] - (60 * $config[cf_login_minutes]))."' ");
sql_query(" delete from $g4[login_table] where lo_datetime < '".date("Y-m-d H:i:s", $g4[server_time] - (60 * $config[cf_login_minutes]))."' ");
----------------------------------------------------------------
문제점은
내가 접속하고 있는 한 다른 회원들이 10분이고 1시간이고 페이지 접속이 없어도 다른 접속자는 계속 접속된걸로 나오는 문제입니다
그러니깐 내가 접속해 있는 한 다른 접속자가 사이트를 떠난지 30분, 1시간 이상 되었다고 해도
내가 접속해 있는한 위 시간이 지난 접속은 삭제가 안되는게 아닐까요
그래서
위 시간이 지난접속자를 삭제하는 코드는 현재 접속자를 사용하는 스킨이있는 페이지 제일 하단에 위치시켜야 맞다고 생각이 드네요
답글 바랍니다
댓글 전체
문제 없어 보입니다.
위 큐어리는 지정된 시간 (60 * $config[cf_login_minutes] ) 보다 더 오래된 접속자는 삭제 되는거 아닌가요?
즉 내가 접속한 것과 무관합니다.
위 큐어리는 지정된 시간 (60 * $config[cf_login_minutes] ) 보다 더 오래된 접속자는 삭제 되는거 아닌가요?
즉 내가 접속한 것과 무관합니다.
위 커리 자체는 문제가 없고요 제말은 위 커리가 실행되는 싯점에 대해 얘기하는 겁니다
A가 B가 현재접속자에 노출되었다고 합시다
A,B가 계속 로그인 중에는 위 커리가 실행이 안되고 그 사이에 다른 사람이 로그인하면 위 커리가 실행되겟죠
일단 두사람이 로그인상태에서 B가 로그아웃을 했다고 합시다
B가 나가도 B는 현재 접속자에 계속 남아있게 됩니다. A의 아이피가 변경되지 않는 한 1시간이고 2시간이고
B의 접속로그는 삭제되지 않습니다. 삭제되려면 A,B외에 다른 사람이 들어오면 B가 삭제가 됩니다
아래 소스를 자세히 보면 삭제되는 싯점이 제가 말한것과 같은거 같은데...음...제가 잘못아는건가요
암튼 지난시간접속자 커리가 else{ } 문장안에 있으면 안되고 그 밑으로 와야 된다고 생각되는데요
$tmp_sql = " select count(*) as cnt from $g4[login_table] where lo_ip = '$_SERVER[REMOTE_ADDR]' ";
$tmp_row = sql_fetch($tmp_sql);
if ($tmp_row['cnt'])
{
$tmp_sql = " update $g4[login_table] set mb_id = '$member[mb_id]', lo_datetime = '$g4[time_ymdhis]', lo_location = '$lo_location', lo_url = '$lo_url' where lo_ip = '$_SERVER[REMOTE_ADDR]' ";
sql_query($tmp_sql, FALSE);
}
else
{
$tmp_sql = " insert into $g4[login_table] ( lo_ip, mb_id, lo_datetime, lo_location, lo_url ) values ( '$_SERVER[REMOTE_ADDR]', '$member[mb_id]', '$g4[time_ymdhis]', '$lo_location', '$lo_url' ) ";
sql_query($tmp_sql, FALSE);
// 시간이 지난 접속은 삭제한다
sql_query(" delete from $g4[login_table] where lo_datetime < '".date("Y-m-d H:i:s", $g4[server_time] - (60 * $config[cf_login_minutes]))."' ");
}
A가 B가 현재접속자에 노출되었다고 합시다
A,B가 계속 로그인 중에는 위 커리가 실행이 안되고 그 사이에 다른 사람이 로그인하면 위 커리가 실행되겟죠
일단 두사람이 로그인상태에서 B가 로그아웃을 했다고 합시다
B가 나가도 B는 현재 접속자에 계속 남아있게 됩니다. A의 아이피가 변경되지 않는 한 1시간이고 2시간이고
B의 접속로그는 삭제되지 않습니다. 삭제되려면 A,B외에 다른 사람이 들어오면 B가 삭제가 됩니다
아래 소스를 자세히 보면 삭제되는 싯점이 제가 말한것과 같은거 같은데...음...제가 잘못아는건가요
암튼 지난시간접속자 커리가 else{ } 문장안에 있으면 안되고 그 밑으로 와야 된다고 생각되는데요
$tmp_sql = " select count(*) as cnt from $g4[login_table] where lo_ip = '$_SERVER[REMOTE_ADDR]' ";
$tmp_row = sql_fetch($tmp_sql);
if ($tmp_row['cnt'])
{
$tmp_sql = " update $g4[login_table] set mb_id = '$member[mb_id]', lo_datetime = '$g4[time_ymdhis]', lo_location = '$lo_location', lo_url = '$lo_url' where lo_ip = '$_SERVER[REMOTE_ADDR]' ";
sql_query($tmp_sql, FALSE);
}
else
{
$tmp_sql = " insert into $g4[login_table] ( lo_ip, mb_id, lo_datetime, lo_location, lo_url ) values ( '$_SERVER[REMOTE_ADDR]', '$member[mb_id]', '$g4[time_ymdhis]', '$lo_location', '$lo_url' ) ";
sql_query($tmp_sql, FALSE);
// 시간이 지난 접속은 삭제한다
sql_query(" delete from $g4[login_table] where lo_datetime < '".date("Y-m-d H:i:s", $g4[server_time] - (60 * $config[cf_login_minutes]))."' ");
}
무슨 말씀인지 이해가 되네요.
// 시간이 지난 접속은 삭제한다
sql_query(" delete from $g4[login_table] where lo_datetime < '".date("Y-m-d H:i:s", $g4[server_time] - (60 * $config[cf_login_minutes]))."' ");
이 큐어리가 else 밖에 있어야 될 것 같습니다.
// 시간이 지난 접속은 삭제한다
sql_query(" delete from $g4[login_table] where lo_datetime < '".date("Y-m-d H:i:s", $g4[server_time] - (60 * $config[cf_login_minutes]))."' ");
이 큐어리가 else 밖에 있어야 될 것 같습니다.