CI 묻고 답하기

제목 중복 로그인 방지를 생각해봤는데 첨언이나 오류 부분이 있으면 봐주셨음 감사드리겠습니다.
글쓴이 implemental 작성시각 2015/07/02 15:03:39
댓글 : 3 추천 : 0 스크랩 : 0 조회수 : 14153   RSS
안녕하세요. 이제 조금씩 몸 상태가 좋아지고 있습니다. :D
이번에 새로 들어간 프로젝트에서 중복 로그인 방지 기능이 추가로 필요로 해서
포럼 검색이나 stackoverflow를 보다 그냥 쉬엄쉬엄할 겸 하나 생각난게 있어서 끄적거려봤는데
조언이나 오류 부분이 있으면 봐주셨음 감사드리겠습니다. 

일단 조건은 기본 ci_sessions 테이블을 확장하거나 다른 테이블을 이용해서 id나 다른 정보를 저장할 수 없는 환경이구요.

포럼 검색을 해보니 id를 가져오거나 추출해서 like 검색으로 중복 로그인인지 아닌지 확인을 하던데
like 검색이나 다른 테이블을 이용하거나 ci_sessions를 확장하지 않고 구현할 수 있는 방법이 없을까 해서 
대충 생각난대로 끄적거려봤습니다. 

우선 ci_sessions 테이블에서 (저는 프로시저로 작성했습니다)
 
BEGIN

-- pSesstionID : 세션아이디
 
SELECT
GROUP_CONCAT(REPLACE(SUBSTRING_INDEX(SUBSTRING_INDEX(user_data, ':', -xx), ';',xx),'"', '')) MemberID
FROM ci_sessions
 WHERE NOT session_id IN (pSesstionID)
   AND user_data NOT LIKE '';
 
END


위와 같이 user_data가 공백이 아닌 것(즉 로그인 상태가 아닌 것) 그리고 자기 자신의 session_id가 아닌 것들  중에 user_data에 있는 데이터를 substring_index 로 가공을 해서 GROUP_CONCAT으로 콤마값 구분으로 MemberID를 가져옵니다. (뒤에 xx는 user_data에 들어가는 정보의 갯수에 따라 틀려지겠죠?)

그리고 모델에서 이 프로시저를 호출해서 retutn 값을 뿌려주면 
컨트롤러에서 이 모델을 호출해서 아래와 같이 나온 데이터들을 콤마값 구분으로 
배열에 담아 주고 


 
			$Array_to_login_count = explode(',', $login_count);
			if (in_array("로그인아이디", $Array_to_login_count)) 
			{
				echo "이미 로그인된 아이디입니다.";
			}
이런 식으로 하면 like 검색이나 다른 테이블이나 ci_sessions 테이블을 확장하지 않고도 
중복 로그인 체크가 가능할 것 같아서 대충 끄적거려봤는데요. 
논리/기술적인 오류나 개선할 점이 있으면 조언 부탁 드리겠습니다. 







 
 다음글 CI 3.0 설치 했습니다. 404 not found ... (3)
 이전글 몇가지 질문 있습니다. (2)

댓글

한대승(불의회상) / 2015/07/02 15:06:53 / 추천 0
like 검색이라는게 좀 걸리기는 하네요.
로그인한 사용자가 많지 않아서 세션의 숫자가 많지 않다면 괜찮을것 같습니다.
변종원(웅파) / 2015/07/02 16:11:49 / 추천 0
제 생각에도 로그인 된 사용자가 많다면 중복로그인 체크에 시간이 상당히 소요될 수 있을 것 같습니다. 
현재 상태에서는 어찌 됐든 like를 제외하고는.... ^^
샤오란 / 2015/07/02 18:06:33 / 추천 0
많이 아프셨나봐요 ㅠㅠ
몸조리 잘하셔서
정모때 건강한 모습으로 뵙길 원합니당~^^