accessuser.zip 버전업 필요하신분 받으셔요~

1.0.2 에서 1.1.0 으로 왔다가

2.0.0 으로 다시 버전업 하였습니다.
php 7.4~8.4 호환 버전으로 업데이트 했습니다.

accessuser v2.0.0 변경사항
모듈명: 사이트 접속자 현황 모듈
버전: 1.0.2 → 2.0.0
작업일: 2026-05-22
작성자: 숭숭군(원작), 불패의초인(Rhymix 호환 개편)
호환: PHP 7.4 / 8.0 / 8.1 / 8.2 / 8.3 / 8.4, Rhymix 2.x, XE 1.x(하위 호환)
왜 2.0.0인가?
1.0.2(2017년)에서 Rhymix 환경 전면 대응 + Cloudflare 프록시 대응 + PHP 8 호환 + 세션 파서 전면 재작성 + 스킨 3종으로 확장했기 때문에 메이저 버전업.
치명적 버그 수정
접속자 0명 표시 문제 (3가지 원인)
| 원인 | 상세 | 해결 |
|---|---|---|
| GROUP BY 쿼리 오류 | SELECT * ... GROUP BY ipaddress가 MySQL strict mode에서 실패 |
GROUP BY 제거, SELECT 컬럼 명시 |
| cur_mid 필터링 | cur_mid != NULL 조건으로 관리자 페이지 접속자 제외됨 |
필터 조건 제거 |
| 세션 타임아웃 60초 | Rhymix session.refresh=300초라 1분 제한 시 대부분 사라짐 | 600초(10분)로 변경 |
세션 파싱 실패
| 원인 | 해결 |
|---|---|
Rhymix 세션 형식 RHYMIX|key|value 미대응 |
unSerializeSession() 전면 재작성 |
PHP 세션 직렬화 내부 | 문자 오인 |
findNextSessionKey() 깊이 추적 파서 구현 |
| RHYMIX 블록 내 login 값 미추출 | RHYMIX 키 내부 데이터 자동 병합 |
로그인 유저 "손님" 표시
| 원인 | 해결 |
|---|---|
| 세션 val에서 is_logged 파싱 실패 시 손님 처리 | DB의 member_srl > 0이면 로그인 상태로 판정 |
"나" 표시 오류 (Cloudflare 환경)
| 원인 | 해결 |
|---|---|
| Cloudflare 프록시로 REMOTE_ADDR이 실제 IP와 다름 | getRealIP() 함수 추가 (CF_CONNECTING_IP → X_FORWARDED_FOR → X_REAL_IP → Rhymix Security → REMOTE_ADDR) |
| 같은 IP에서 다른 계정 접속 시 구분 불가 | 로그인 상태면 member_srl 비교로 변경, 비로그인만 IP fallback |
PHP 8 호환성 (전 파일 공통)
| 변경 항목 | Before | After |
|---|---|---|
| 레퍼런스 호출 | &getModel(), &getController() |
getModel(), getController() |
| Object 생성 | new Object() |
class_exists('BaseObject') ? new BaseObject() : new Object() |
| 변수 초기화 | 미초기화 사용 | new stdClass(), array() 초기화 |
| strpos 비교 | if(strpos(...)) |
if(strpos(...) !== false) |
| foreach null | 체크 없음 | if($data && is_array($data)) |
| 경로 상수 | _XE_PATH_ |
RX_BASEDIR 분기 처리 |
수정 파일 목록
| 파일 | 작업 |
|---|---|
accessuser.class.php |
PHP 8 호환 수정 |
accessuser.model.php |
전면 재작성 |
accessuser.controller.php |
PHP 8 호환 수정 |
accessuser.view.php |
PHP 8 호환 수정 |
accessuser.admin.view.php |
PHP 8 호환 수정 |
accessuser.admin.controller.php |
PHP 8 호환 수정 |
accessuser.mobile.php |
PHP 8 + RX_BASEDIR 대응 |
queries/getAccessUsers.xml |
GROUP BY 제거, 컬럼 명시 |
conf/info.xml |
v2.0.0, 작성자 추가 |
skins/default/*.html |
&getModel → getModel |
신규 기능
Cloudflare 프록시 대응
getRealIP()함수: 실제 클라이언트 IP를 정확하게 가져오는 우선순위 체인- Rhymix의
Security::getRealIP()연동
본인 판정 개선 (is_me)
- 로그인 상태:
member_srl비교 (IP 무관, 가장 정확) - 비로그인 상태: IP 비교 fallback (Cloudflare 대응)
- 같은 PC에서 다른 계정으로 접속해도 각각 정확히 "나" 표시
브라우저/OS 감지 업데이트
- 브라우저 추가: Edge, Whale(웨일), 삼성인터넷
- 감지 순서 최적화: Chromium 기반 브라우저 오감지 방지
- OS 추가: 윈도우 11 (Build 22000+), iOS (iPad 포함)
봇 목록 업데이트
- 추가: SemrushBot, AhrefsBot, MJ12bot, DotBot, PetalBot, GPTBot, ClaudeBot, ByteSpider, CCBot, AppleBot, DuckDuckBot, BaiduSpider, Amzn-SearchBot
신규 스킨 2종
bs_card (카드형)
- 접속자마다 개별 카드 표시
- 반응형 그리드 (3열→2열→1열)
- 본인 카드 파란 왼쪽 보더 + "나" 뱃지
- 봇 반투명 처리
- OS/브라우저 칩 태그, hover 효과
bs_table (모던 테이블)
- 둥근 모서리 테이블, 깔끔한 색상
- 본인 행 파란 왼쪽 라인 강조
- 모바일 반응형 (IP/플랫폼/브라우저 자동 숨김)
- 그라데이션 접속자 수 뱃지
적용 방법
modules/accessuser/폴더에 덮어쓰기- 캐시파일 재생성
- 기본설정 → 스킨 선택 (default / bs_card / bs_table)

스킨 추가 1