C.W.K.
Stream
Lesson 03 of 05 · published

Active Sessions 테이블 — 지금 누가 로그인돼 있는지

~15 min · sessions-table, ip-annotation, ux

Level 0Greenhorn
0 XP0/53 lessons0/14 achievements
0/100 XP to next level100 XP to go0% complete

네가 가장 자주 볼 테이블. "지금 내 앱에 실제로 인증된 게 뭐고, 어디서, 언제부터, 얼마나 더 남았어?" 를 답해.

row 당 보여줄 것

컬럼이유display 팁
Token prefix (8 chars)full token 노출 없이 audit log 와 correlate 가능monospace 사용
IP어떤 디바이스인지 알려줘알려진 IP 어노테이션 ("내 노트북", "폰 (Tailscale)")
Created at로그인이 얼마나 전에상대적 ("3시간 전") + tooltip 에 절대 시간
Expires at / 남은 시간auto-die 시점색: <30분이면 적, 그 외 회색
"Revoke" 버튼외과적 kill인라인, confirm 필요

정렬과 필터링

sort/filter 프레임워크 추가 X. 솔로 앱은 active session 5개 넘는 거 드물어. created_at desc 로 정렬하고 멈춰. 50개 되면 수동 조사할 가치 있는 다른 문제 가진 거.

Code

Active sessions 쿼리·sql
SELECT
  substr(token, 1, 8) || '…' AS token_prefix,
  ip,
  created_at,
  expires_at,
  (expires_at - strftime('%s','now')) / 60 AS minutes_remaining
FROM security_sessions
ORDER BY created_at DESC;
친근한 이름으로 알려진 IP 어노테이션·python
KNOWN_IPS = {
    "100.64.0.5":  "폰 (Tailscale)",
    "100.64.0.10": "노트북 (Tailscale)",
    "100.64.0.15": "태블릿 (Tailscale)",
    "192.168.1.50": "데스크탑 (LAN)",
    "127.0.0.1":   "Local",
}

def label_ip(ip: str) -> str:
    return KNOWN_IPS.get(ip, ip)

External links

Exercise

Active session 쿼리를 IP 라벨링 있는 HTML 테이블로 렌더. 노트북, 폰, 태블릿 (또는 브라우저 3개) 에서 로그인. 각 row 가 올바른 친근한 이름 가져오는지 확인. row 마다 'Revoke' 버튼 추가 — Track 7 의 /admin/security/sessions/{prefix}/delete 침.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.