[CodeIgniter] Message: session_write_close(): Skipping numeric key...
문제점 및 원인분석
다음과 같이 CodeIgniter로 모델에서 받은 데이터를 곧바로 세션에 할당하려는 와중에 위와 같은 오류 메시지를 받았습니다.
if ( $this ->input->method() === ' post ' ) { $admin_id = $this ->input->post( ' mem_id ' ); $admin_pw = $this ->input->post( ' mem_password ' ); $admin = $this ->login_model->get_admin( $admin_id , $admin_pw ); if ( isset ( $admin ) && ! empty ( $admin ) ) { $this ->session->set_userdata( $admin );
오류 상세 내용은 아래와 같습니다.
아래 참고자료에 따르면 세션의 색인 참조값을 문자열로 준 것이 아니라, 숫자로 주어서 발생한 것이 문제인데, $admin 배열의 의도를 쿼리 결과를 그대로 받은 것이라 "키"->"값" 쌍의 배열로 의도한 것이었습니다.
public function get_admin ( $admin_id , $admin_pw ) { $sql = " SELECT admin_id, admin_name, admin_level, is_active FROM ADMINS WHERE 1 = 1 AND admin_id = ' { $admin_id } ' AND admin_pw = password(' { $admin_pw } ') AND is_active = 1 ; " ; $result = $this ->db->query( $sql ); return $result ->result_array(); }
하지만, result_array() 함수의 반환값은 레코드들의 단순 배열이라 세션에 바로 할당할 경우, 첫 번째 키값이 문자열이 아닌 숫자 0이 되어 위 그림과 같은 오류가 발생하였습니다.
해결 방안
다음과 같이 첫 번째 행을 세션에 할당하도록 수정하면 문제가 깔끔하게 해결됩니다.
if ( $this ->input->method() === ' post ' ) { $admin_id = $this ->input->post( ' mem_id ' ); $admin_pw = $this ->input->post( ' mem_password ' ); $admin = $this ->login_model->get_admin( $admin_id , $admin_pw ); if ( isset ( $admin ) && ! empty ( $admin ) ) { $this ->session->set_userdata( $admin [ 0 ]);
달라진 부분은 set_userdata() 호출 시, $admin를 바로 전달하는 것이 아니라, $admin0 과 같이 첫 번째 행을 전달하게 하면, 0이 키로 할당되는 문제가 해결됩니다.
참고자료
from http://hbesthee.tistory.com/1581 by ccl(A) rewrite - 2020-03-06 10:54:43
댓글
댓글 쓰기