CI 묻고 답하기

제목 session 연습중 !! 문제 발생!!
글쓴이 짱큰형 작성시각 2012/09/28 01:27:28
댓글 : 5 추천 : 0 스크랩 : 0 조회수 : 16807   RSS
function login()
{
$this->form_validation->
set_rules('username', 'Username',
'xss_clean|required|callback_username_check');
$this->form_validation->
set_rules('password', 'Password',
'xss_clean|required|min_length[4]|max_length[12]|sha1|
callback_password_check');
$this->_username = $this->input->post('username');
$this->_password =
sha1($this->_salt . $this->input->post('password'));
if($this->form_validation->run() == FALSE)
{
$this->load->view('account/login');
}
else
{
$this->account_model->login();
$data['message'] =
"You are logged in! Now go take a look at the "
. anchor('account/dashboard', 'Dashboard');
$this->load->view('account/success', $data);
}
}

function password_check()
{
$this->db->where('username', $this->_username);
$query = $this->db->get('users');
$result = $query->row_array();
if($result['password'] == $this->_password);
{
return TRUE;
}
if($query->num_rows() == 0)
{
$this->form_validation->
set_message('password_check', 'There was an error!');
return FALSE;
}
}

 위 원본..

아래 제가 바꾼것. 

unction login()
 {
  //echo sha1($this->input->post('password'));
  //set_rules 검사규칙을 설정 :: 필드이름을 알바보기 쉽게 바꾸주자.
  // Cascading Rules 3번째 파라미터를 이용해 적용한다.
  //콜백을 호출하기위해서는 규칙에 있는 함수명을 "callback_" 라는 접두어와 함께 넣어줌. 
  //콜백함수에 추가 파라미터를 전달하고 싶다면, 콜백함수 뒤에 대괄호를 추가한후 그안에 넣어주면 됌.예: "callback_foo[bar]" .
  //여러분은 콜백으로 전달되는 폼 데이터를 처리하거나 리턴할수 있습니다. 콜백함수가 불린(boolean TRUE/FALSE) 외의 어떤 값을 리턴하더라도 원본의 폼데이터가 아니라 새롭게 처리된 데이터라고 가정합니다.
  $this->form_validation->set_rules('username','Username','xss_clean|required|callback_username_check');
  $this->form_validation->set_rules('password','Password','xss_clean|required|min_length[4]max_length[12]sha1|callback_password_check');
  

  //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  $this->_username = $this->input->post('username');
  $this->_password = sha1($this->input->post('password'));
  if($this->form_validation->run() == FALSE)
  {
   $this->load->view('account/login');
  }
  else
  {
   $this->account_model->login();
   $data['message'] = "You are logged in! Now go take a look at the ". anchor('account/dashboard', 'Dashboard');
   $this->load->view('account/success', $data);
  }
 }
 function logout()
 {
   $this->session->sess_destroy();
   $this->load->view('account/logout');
 }
 function password_check()
 { 
  //$this->db->where();이함수는 4가지중 한가지 방법을 사용하여 WHERE절을 설정할수 있음.
  $this->db->where('username',$this->_username);

  //조회쿼리를 수행하면 유저 테이블의에 있는 레코드를 가져오는 쿼리를 자동으로 실행후 쿼리변수에 저장한다.
  $query = $this->db->get('users');

  //row() 한줄의 결과만을 리턴합니다. 한줄 이상의 결과면 맨 윗줄만 가져온다.
  //row_array() 위 함수와 동일하나 객체가 아닌 배열의 형태로 결과를 리턴한다. 
  if(count($query->row_array()) == 0)
  {
   $this->form_validation->set_message('password_check','You have not ID, try again please!');
   return FALSE;
  }

  $result = $query->row_array();
  if($result['password']==$this->_password)
  {
   return TRUE;
  }
  else
  {
   $this->form_validation->set_message('password_check','There was an error!');
   return FALSE;
  }
  
 }

User Authentication(사용자 검증)1

 

CodeIgniter 1.7 Professional Development(2010)의 일부를 발췌해서 번역한 것입니다

이것을 제가.. 돌리고 있는데요.. 정말 어렵게. 돌리고 있어요. 다 했다 싶었는데..

로그인 버튼을 두번 누르면..

새션이 생겨 버립니다. 왜 그럴까요? ㅠㅠ 오류가 왜 뜨는지도 모르겠지만..
새션이 생기는게 더. 신경 쓰이네요,,,

A PHP Error was encountered

Severity: Notice

Message: Undefined index: password

Filename: controllers/account.php

Line Number: 80

A PHP Error was encountered

Severity: Warning

Message: Cannot modify header information - headers already sent by (output started at C:\APM_Setup\htdocs\system\libraries\Exceptions.php:164)

Filename: libraries/Session.php

Line Number: 662

Success!

You are logged in! Now go take a look at the Dashboard


 

 

 

 

 다음글 why? how? CI sessoin!!!!! 질문.... (3)
 이전글 view 부분 상위 경로로 변경 하는 방법? (2)

댓글

짱큰형 / 2012/09/28 01:36:16 / 추천 0
 위에 값은 틀림값 입니다.  맨 아래 보시면.. 로그인 성공 페이지가 뙇~ 
템포 / 2012/09/28 08:58:22 / 추천 0
처음껀 password 변수가 정의되어있지 않다 이건거같은데..
두번째껀 session을 로드하기전에 뭔가가 불렸다는거 같은데..

시작한지 얼마안되서 에러만 보고 저도 뭐라 말씀드리기가 어렵네요;;
한대승(불의회상) / 2012/09/28 11:10:30 / 추천 0
password 변수만 초기화 시켜 주시면 에러가 모두 해결 될겁니다.
변종원(웅파) / 2012/09/28 12:21:48 / 추천 0
두번째 메세지는  세션함수 전에 에러나 echo 출력이 있으면 나오는 메세지입니다.
(기억해두시면 앞으로 프로그램할때 편합니다.)

윗줄 에러를 없애면 아랫줄도 안나오구요. 해결은 불상님 말씀처럼..



짱큰형 / 2012/09/28 17:59:13 / 추천 0
 웅파님 불의회상님 조언 감사합니다.