회원 목록에서 현재 로그인 중인지 여부를 확인할 수 있는 방법을 찾고 있습니다.

 

그런데 제가 찾고자 하는 방법은 DB 테이블의 칼럼 값을 통해 확인하는 방법입니다.

xe_member 테이블의 칼럼을 확인해 보니, 멤버의 현재 로그인 여부를 나타내는 칼럼이 없는거 같아서요..

 

  • profile

    XE나 라이믹스는 세션을 통해서 해당 계정 로그인 여부를 확인하고 있습니다. 따라서 디비를 통해서 세션을 공유하는 기능을 사용할 때 디비를 통해서 로그인이 유지 되는지 확인 할 수 있으나 사이트의 부하가 많이 가서 자주 쓰지 않는 방법입니다. 그리고 디비를 통한 세션을 공유하는 기능을 사용하더라도 데이터를 찾기가 어려울수도 있습니다.

  • profile

    하지마세요. 처음에 제공하면 좋을 것 같은 혹하는 서비스 중 하나가 접속자 보여주는거지만 서버 터트리기 딱 좋은 겁니다. 사이트가 커지길 바라지 않는다면 적용하셔도 되구요. 사이트가 조금 커진 후 내릴 서비스라면 처음부터 제공 안하는게 좋습니다.

    서버를 괴롭히면서까지 제공할 만한 것은 아니라 생각합니다. 물론 저도 초창기(7년전) 에는 사용해 본적이 있습니다. 누가 알려주지 않으면 경험으로 알 수밖에 없기에 가지 않아야 할 길을 가보고 돌아오게 된거죠.

    https://xetown.com/topics/1135813

  • profile

    가장 먼저 알고 계셔야 할 것은 WWW의 구조상 특정 유저가 현재 로그인 상태인지 정확하게 알 수 있는 방법은 없다는 점입니다. 로그인하고 한두 페이지 보다가 브라우저 창(탭)을 닫고 나가 버리더라도 서버는 알 수가 없어요. 정말로 나간 건지, 아니면 본문에 포함된 동영상을 보느라 아무 것도 클릭하지 않고 있는 것 뿐인지... 즉 "로그인 중"이라는 상태는 엄밀히 말하면 존재하지 않습니다. 뭔가를 클릭하여 페이지를 이동할 때마다 순간적으로 로그인 처리되어 해당 회원의 권한으로 작업을 처리하고, 페이지 이동이 끝나면 (다음에 뭔가를 클릭할 때까지는) 더이상 어느 누구도 로그인 상태가 아니게 됩니다.

    따라서 현재 로그인 사용자를 파악한다는 것은 최근 n분 사이에 페이지를 이동한 기록이 있는 사용자 목록을 뽑아낸다는 뜻으로 통용됩니다. 대개 5분 정도를 기준으로 삼는데, 그 사이에 나갔을 수도 있지요.

    XE에서는 "인증 세션 DB 사용" 기능을 사용하면 가장 최근에 페이지 이동을 시도한 시간이 DB에 기록됩니다. 이것을 활용하면 최근 n분 사이에 페이지를 이동한 사용자 목록을 뽑아낼 수 있습니다. 흔히 "현재 로그인 회원 목록"이라고 하는 것은 99.9%의 확률로 이걸 얘기하는 것입니다.

    같은 기능을 사용하여 특정 회원이 최근에 페이지를 이동한 적이 있는지 관리자가 파악할 수도 있습니다. 분탕질을 하는 회원의 세션을 DB에서 지워서 강제로 로그아웃시키는 등의 조치를 취하는 데 도움이 되겠지요. 이것도 엄밀히 말하면 로그인 상태를 푸는 것이 아니라, 다음번에 그 사람이 뭔가를 클릭했을 때 순간적으로 로그인 처리가 되는 것을 예방하는 것에 가깝습니다. (이걸 웹에서 할 수 있도록 해주는 모듈은 없는 것 같습니다만, DB를 직접 다룰 수 있다면 어렵지 않습니다.)

    문제는 "인증 세션 DB 사용" 기능이 서버 부하를 크게 높인다는 점입니다. 최근 접속 시간뿐 아니라 세션에 포함된 온갖 다른 정보들도 모두 DB에 기록하기 때문에, 사용자가 조금만 늘어나면 사이트 속도가 느려지는 것이 체감될 정도이고 조금 더 심해지면 아예 서버가 터져버립니다. "현재 로그인 회원 목록" 등의 위젯을 사용하실 생각이라면 윗분 말씀대로 일찌감치 포기하시고, 특정 회원을 제재하거나 강제 로그아웃시킬 목적이라면 제한일 지정 등 다른 방법을 활용해 보시기 바랍니다.

  • profile
    저는 예전에 모듈 사용해서 실시간으로 확인하고 그랬는데요.
    위에 댓글 남겨주신 분들 말씀처럼 서버에 굉장히 무리를 주는 것을 경험하고 기능을 제거하였습니다.
    별로 추천드리고 싶지는 않네요.
  • profile

    대안으로는 인증 세션 db를 사용하지 않고 별도 모듈이나 애드온으로 로그인 정보만 따로 db에 기록하는 것으로 자료를 새로 만든다면 부하 없이 로그인 상태만 식별이 가능하겠습니다.
    생각해 보니 제가 아주 오래전에 구해 놓은 애드온 중 이 방식의 애드온이 하나 있네요. 어떤 상황에서 로그인으로 파악해서 db에 로그인 시간을 저정하는지 확인해 봐야겠네요.

     

    - 애드온을 열어보니 페이지 이동시 현재 시간을 로그인 시간으로 저장하네요. 이런 애드온을 사용한다면 말씀 하신 로그인 유무를 확인하면서 db 부하를 크게 주지 않고 구현 가능해 보입니다. 로그인 회원에게만 동작, 현재시간만 upadate,  db에 기록 정보는 회원번호,시간  이게 전부네요.애드온에서는 아마도 창을 닫기 전까지는 애드온코드가 동작하지 않도록 조치를 해둔 것도 보이는데 이는 조금 시간이 지나면 현재 활동하고 있는 로그로 사용하기 어려울 수 있는 단점이 보이네요. 창을 닫지 않고 활동해도 매 페이지 이동마다 기록하진 않아도 적당한 간격으로는 로그인 시간을 업데이트 시키는게 더 좋을 수 았겠네요.

  • ?
    저는 채팅서버 구축했고 거기에 덤으로 접속인원도 뜹니다.