CI 묻고 답하기

제목 로그인정보를 유지하려면..
글쓴이 ci입문자 작성시각 2012/10/28 12:25:01
댓글 : 3 추천 : 0 스크랩 : 0 조회수 : 14559   RSS
열심히 공부하고 있는 입문자입니다~

공부하다가 궁금한게 생겨서 질문드리는데 ..


그냥 간단하게 아래처첨 구성해 봤는데요.


* 컨트롤러의 index에 바로 login form을 연결시켜 첫 화면이 로그인 폼이 보이게한다.
* 거기서 로그인을 하는데, 데이터베이스에 그 값이 없다면 회원가입화면으로 넘어간다.
* 회원가입 폼에서 값을 입력하면, 그 값을 배열로 모델에 던져주어 db에 입력한다.
* 다시 로그인화면에서 로그인을 하여(db데이터를 검색해서 있다면 성공) 로그인이 되게한다.



여기까지는 구현을 했는데요~

근데, 사용자가 로그인만하고 끝날 건 아니잖아요?

그 사용자가 어떤 페이지를 넘어가더라도 로그인 정보가 유지되게 해야 한다고 생각이 들더라구요


그래서 곰곰히 생각을 해봤는데 ..


우선 첫번째 당면한 문제가.

과연, 로그인화면에서 넘어간 사용자의 정보를 , 그 넘어간 화면에 어떻게 전달해 줄까? 입니다.
(즉, 아이디와 패스워드를 입력해서 로그인을 할텐데, 그러면 로그인 후 전환되는 화면에서 이 사용자가 로그인했다는
접속정보를 계속 가지고 있으려면, db에서 계속 뽑아내야 하던지 할거같은데..하는?ㅠ)

즉, 소스로 다시 한번 정리해보면

컨트롤러에서 바로 로그인 폼을 불러오고

function index()//기본 디폴트화면->로그인 폼.
{
$this->load->view('login_form');
}


로그인 폼에서는 데이터의 db존재 여부를 판단합니다.

<html>
< head>
< meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
< title>로그인</title>
< /head>

<body>
<?=form_open("/login/member_check")?>
<table border="3" align="center">
< tr>
<td>아이디</td>
<td><input type="text" name="userid" /></td>
< /tr>
< tr>
<td>패스워드</td>
<td><input type="text" name="passwd" /></td>
<td><input type="submit" name="login" value="로그인" /></td>
< /tr>
< /table>
< p align="center"><?=anchor("login/member_write","회원가입")?></p>
< /form>
< /body>
< /html>


그래서 다시 컨트롤러의 member_check 로 넘어오구요~

function member_check() //로그인버튼 클릭시 데이터베이스 검색
{
$data = array(
'userid'=>$_POST['userid'],
'passwd'=>$_POST['passwd']
);

$this->load->model('login_model');
$this->login_model->search($data);
}

여기서 폼에서의 데이터를 받아서 model에 뿌려주어 체크를 해주는 방식입니다.

//회원 검색을 위한 함수. 로그인시 데이터베이스에 자료 존재 여부를 판단한다.
function search($data)
{
$this->db->where('userid',$data['userid']);
$this->db->where('passwd',$data['passwd']);
$q = $this->db->get('member_info');

//쿼리의 결과값을 체크한다. 만약 위 조건에 맞다면 $q는 0이상이 검색될 것이다.
if($q->num_rows>0)
{
redirect('login/member_view');
}else{
echo 'dose not data is exits.';?>
<p><?=anchor("login/member_write/","회원가입")?><?=anchor("login/login"," 메인으로")?></p>
<? }

그리하여, db가 존재한다면 저 위의 빨간 함수에 의해서 바로 컨트롤러의 member_view함수를 호출하여

function member_view()
{
$this->load->view('member_view');
}

위 처럼 member_view라는 로그인 성공 화면을 출력하는 간단한 구성인데요.


이 memmber_view에 로그인한 사용자의 정보를 어떻게 던져줘야할까요?

(뭐..구현이 된다면 @@@님 로그인 환영합니다. 요런 메세지가 뜨겠지요?
그런데 @@@ 님이라는걸 판단하기 위해서는 데이터를 뽑아내야 하거나 그래야 할거같은데.. 여기서 문제인겁니다ㅠ)
제가 해본 방법은 저 위의
redirect('login/member_view');
함수를

redirect('login/member_view',$data);

이렇게 변수를 던져주면 컨트롤러에서 받을 수 있지 않을까 ..해서
위 처럼 던져주고,

컨트롤러에서도

function member_view($data)
{
$this->load->view('member_view',$data);
}

이렇게 해줘봤는데 아예 $data자체를 못받더라구요..

음 .. 뭐 좋은 방법이 없을까요?

 다음글 이게 무슨 차이가 있는걸까요? (2)
 이전글 쿼리문 질문입니다~! (2)

댓글

변종원(웅파) / 2012/10/28 13:44:20 / 추천 0
모델에서 제어를 하시려고 하니 그렇습니다. 제어는 컨트롤러에서.... 그리고 누구님 환영합니다의 누구는 보통 세션이나 쿠키에서 가져옵니다. 로그인하고 나서 필요한 정보(아이디 이름 이메일 닉네임등)를 세션으로 남깁니다. 로그인 체크는 그 세션 유무로 합니다
니삼 / 2012/10/28 22:23:48 / 추천 0
웅파님 말대로 세션에서 제어하시면 됩니다. 세션이 만들어진 이유가 질문의 목적이랑 같으니까요.
닉네임같은건 쿠키에 넣어두고 뿌려준다 해도
실제로 디비에 넣을땐(글을 쓴다거나) 서버에 저장되는 세션에 있는 값을 통해서 값을 다시 얻어서 넣는다거나 세션에 있는 값을 쓰시면됩니다.
쓰고보니 웅파님댓글이랑 다를게 하나두 없내요.. 하지만 댓글이 많으면 0.1g이라도 더 도움이 되시길 바라며 ㅋㅋ;
수야디벨 / 2012/10/28 23:49:50 / 추천 0
웅파,니삼//

두분 말씀 많은 도움 됩니다.정말 감사합니다 ㅎ

웅파님 말씀처럼 세션과 쿠키쪽을 얼핏 본것도 같네요, 다시한번 찾아봐야겠습니다.

니삼님 말씀처럼 , 지나가는 말씀이라도 그렇게 해주시면

분명 저에게 도움이 되는거 같습니다.

세심한 배려 감사합니다^^