CI 묻고 답하기

제목 [해결]로그인처리 세션문제..(내용수정)
글쓴이 쿠사 작성시각 2014/12/23 22:45:41
댓글 : 8 추천 : 0 스크랩 : 0 조회수 : 17750   RSS
로그인을 하기전에는 로그인폼이 출력되었다가
로그인을 하게되면 아이디와 로그아웃버튼을 출력해주는 화면을 구성하고싶습니다.
현재 로그인을 하면 쿠키와 세션이 생성되는데
html단에서 어떤식으로 로그인이 되었다는걸 체크해서 해당하는 html화면을 출력해줄수있는건가요?

현재에는 로그인시에 컨트롤러에서 $this->IS_MEMBER = 1; 이라는 값을 주고
html에서 if문으로 IS_MEMBER가 1인가 0인가를 판별해서 해당하는 html을 출력해주는 상태인데
IS_MEMBER가 어디에위치하는건지 어떤식으로 존재하는것인지
잘 감이 안잡히네요(이마저도 소스수정하다보니 제대로 동작안함)

제생각엔 쿠키나 세션이 정보를 넣어두면 해당 정보를 가지고 로그인상태인지를 판별해야 하는게 아닌가싶은데
보통 로그인처리는 어떤식으로 이루어지는건가요..?


질문수정
-------------------------------------------------------------------------
현재 로그인을 하면 세션과 쿠키가 생성이되는데 (세션은 DB내 session테이블에 저장)
로그아웃을 했을시에 데이터베이스에서 해당 레코드를 삭제하는 기능을 만들어야하는건지 잘 모르겠습니다.
코드이그나이터 config.php파일에서 session에 관련된 설정을 해 둔게 있는데
제가 직접 레코드삭제쿼리를 삭제해야하는건지 아니면 코드이그나이터 내에서 삭제를 유연하게 도와주는
기능이 있는건지를 잘 모르겠습니다.
(현재 로그아웃을 하면
            $this->session->sess_destroy();        // 세션정보 삭제
            delete_cookie('cookie_user_id');    // 쿠키정보 삭제
)
과 같이 정보를 삭제하는데 여전히 DB에는 세션정보가 남아있어서 로그아웃이 제대로 되지 않습니다.
 다음글 ajax 관련 질문입니다. 가끔씩 ajax 오류가 나네... (5)
 이전글 [해결]로그인 처리에 대한 질문 (11)

댓글

변종원(웅파) / 2014/12/24 13:58:03 / 추천 0
$this->session->sess_destroy(); 실행되면 세션내의 userdata 부분이 삭제됩니다.
그래서 로그아웃 효과가 되는거구요. 

보통 로그인 여부는 세션의 사용자아이디나 이름으로 체크를 하거나 logged_in 값을 1로 만들어서 세션에 담아서 처리합니다.
쿠사 / 2014/12/24 14:45:22 / 추천 0
변종원(웅파) // 답변 감사합니다. 그런데 궁금한부분이 있는데 $this->session->sess_destroy()를 실행하니 세션이 삭제되는것 같기는 한데 데이터베이스 내에는 로그인할때 생성되었던 레코드가 계속 남아있더라구요. 데이터베이스 내의 세션은 $this->session->sess_destroy()를 해도 원래 삭제가 안되는건가요? 그리고 세션에서 로그인되어있는지 확인하기위해서 저는 
if (!$this->session->userdata('session_user_id'))와 같이 세션에 유저아이디가 존재하면 이라는 식으로 검사를 하는 중인데
기존에 코드에서는 IS_MEMBER이라는 값을 1로 만들어서 if(!IS_MEMBER)이런식으로 검사를 하더라구요..
그런데 IS_MEMBER라는건 어떻게 생성되고 어디에 어떻게 존재하는것인지...(소멸은 언제되는지 등)
그냥 세션이 존재하는지를 확인을 하면 되지 왜 굳이 새로운 변수를 1로 값을 넣어서 비교를 하는걸까요;;?

 
kaido / 2014/12/24 17:44:50 / 추천 0
의문점이 많으신걸 보니 좋은 프로그래머가 되실 소양이 충분 하십니다.

왜 그랬을까?

이유는 만든 사람만이 알겠지만 추측 하는 방법은 여러가지 입니다.

세션의 uesrid 와 username 으로도 체크가 가능한데 is_member를 사용한 이유?

userid 와 username이 만일 도중에 변하거나 지워져야 할 이유가 생긴 다면?
극히 드물겠지만 그럴 수도있습니다.

is_member에 왜 하필 1 을 썻을까?

이건 일종에 관행인데..

php는 1이라는 숫자는 조건문에서 true 로 판단하고 0을 flase 로 판단 합니다.

1과 0 으로 판단한건 C 언어때부터의 관행이라고 저는 생각 합니다.

1 = 있음
0 = 없음 혹은 디폴트
-1 = 실패

코드 분석하실때 왜 이렇게 넣었는지는 생각해 보시고
아무리 생각해도  '난 이거 불편해! 이게 더 편할 것 같은데?' 라고 생각 하시면 생각하는 대로 코딩 하시면 됩니다.

편하게 생각 하세요 ^^
쿠사 / 2014/12/24 18:28:32 / 추천 0
kaido // 답변 감사합니다. 프로그램에 깊이가 없다보니 기초적인부분에서 많은 질문을 하게되네요;;;
그런데 세션의 user_id라는 부분이 변하거나 지워질 일이 있는건가요?(웹 전체적인 동작에 깊이가 없어 그러한 상황이 언제 발생될지 감이 잘 안잡히네요)
그리고 만약 세션이 변하거나 지워졌다면 당연히 로그아웃처리가 되어야 되는게 옳은거 아닌가요?
세션은 사라졌는데 IS_MEMBER 변수가 1이어서 문제가 되는 경우는 없는건가요...?
(그리고 IS_MEMBER라는건... 전역변수 같은건가요..? 서버에 있는 변수인건지, 클라이언트에 있는 변수인건지... 어디서 생성이 되는건지 등등.. 자세한걸 몰라서 그냥 세션에 아이디가 존재하면 회원이다 라는식으로 프로그램을 수정해나가는 중인데 확실하게 모르니까 어딘가 찝찝하네요;;)
kaido / 2014/12/24 20:23:34 / 추천 0
이런 경우도 있습니다.

회원이 로그아웃을 했습니다.

그런데 자신이 쓴 글은 로그아웃을 해도 보고 싶습니다. [편의상]

로그아웃은 했으나, 아직 사이트를 떠나지 않은 상태. 이런 판별도 가능 합니다.

이 업계가 논리적으로만 작업 하면 아무도 고생 안합니다 ( ..)
쿠사 / 2014/12/24 22:09:33 / 추천 0
kaido // 죄송한데 제가 이해력이 부족해서 이해가 잘 안되네요... 
로그아웃은 했는데(즉 세션정보는 없지만)
반로그인상태라고해야하나 그런상태를 나타낼수 있다는 의미인가요?
(굳이 그런상태를 만들 필요성이 있는지...이해를 잘못했을수도...)

그리고 특별한(위와같은) 경우가 아니라면 굳이 특정변수(IS_MEMBER)에 1이나 0값을 넣지않고 세션만으로 로그인 처리를해도
크게 문제는 없을까요?(지금생각으로는 크게 IS_MEMBER의 필요성을 못느끼겠고 관리가 어려울것같아서...)
kaido / 2014/12/25 04:47:10 / 추천 0
네. 요건에 따라서는 별별 상황이 다 있습니다.

자세한 소스는 보지 않아서 저도 정확히는 판단 못하겠지만,

쿠사님이 판단 하기에 이게 정말 필요하지 않다고 생각 하면 생략 하시거나 무시 하시면 됩니다.

프로그램의 관리는 전적으로 담당자가 판단 하고 관리 하는 것입니다. 

이미 만들어진 프로그램이 꼭 좋은 것이라는 법은 없어요. 판단 하시기 나름입니다.

 
쿠사 / 2014/12/26 19:35:36 / 추천 0
kaido // 그렇군요. 답변 감사합니다~