제목 | 중복 로그인 방지를 생각해봤는데 첨언이나 오류 부분이 있으면 봐주셨음 감사드리겠습니다. | ||
---|---|---|---|
글쓴이 | implemental | 작성시각 | 2015/07/02 15:03:39 |
|
|||
안녕하세요. 이제 조금씩 몸 상태가 좋아지고 있습니다. :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
|
변종원(웅파)
/
2015/07/02 16:11:49 /
추천
0
제 생각에도 로그인 된 사용자가 많다면 중복로그인 체크에 시간이 상당히 소요될 수 있을 것 같습니다.
현재 상태에서는 어찌 됐든 like를 제외하고는.... ^^ |
샤오란
/
2015/07/02 18:06:33 /
추천
0
많이 아프셨나봐요 ㅠㅠ
몸조리 잘하셔서 정모때 건강한 모습으로 뵙길 원합니당~^^ |
로그인한 사용자가 많지 않아서 세션의 숫자가 많지 않다면 괜찮을것 같습니다.