CI 묻고 답하기

제목 session질문
글쓴이 pillar 작성시각 2010/07/15 12:40:50
댓글 : 5 추천 : 0 스크랩 : 0 조회수 : 24347   RSS
session에러 질문드립니다

autoload에 세션 넣고 세션DB도 config에서 적어주고
controller의 펑신에서 $this->session->set_flashdata('category', $category);했는데요

A PHP Error was encountered

Severity: Warning

Message: Cannot modify header information - headers already sent by (output started at C:\APM_Setup\htdocs\www\application\controllers\member\join.php:65)

Filename: libraries/Session.php

Line Number: 672

에러 뜹니다. $this->session->set_userdata('category', $category);해도 같은 에러 나오네요.
join.php, Session.php 바이너리로 열어서 앞에 공백코드 없는거 확인했고요.

한가지 더 알고픈데 set_userdata 여러번 쓸수 있나용..워낙 왕초보라서^^

고수님들 많이 기대합니다.

태그 session
 다음글 ez_sql CI에 넣어서 사용하시는 분... (2)
 이전글 마냐님의 Pagination 일반형 수정에 관한 질문입... (4)

댓글

변종원(웅파) / 2010/07/15 12:59:21 / 추천 0
$this->session->set_flashdata 전에 공백이나 echo 등의 출력이 있으면
무조건 위와 같은 에러가 납니다. 공백뿐만이 아니라 echo 출력이 있는지도 살펴보세요.

join.php 65라인..

set_userdata <- 세션 만들고 싶으시면 만들면 됩니다. ci라고 php에서 세션 사용하는 것과 다를 것 없습니다.

pillar / 2010/07/16 08:59:51 / 추천 0
웅파님 말씀대로 $this->session->set_flashdata전에 print_r()했었네요.
고놈 삭제하니 정말 에러출력 없어졌어요.ㅇㅇ

헌데
$category = $this->uri->segment(4);
$this->session->set_userdata('category', $category);
하였는데 세션테이블에 다른 값이 들어가네요.
분명 $category에는 1이 들어갔는데 세션테이블에는 0이 들어갑니다.
암만 봐도 다른데선 $category하고 세션테이블에 써넣기 하는데가 없는데...
이건 와 그럴가요

변종원(웅파) / 2010/07/16 10:43:08 / 추천 0
$this->uri->segment(4);

이 값을 찍어봐도 그런지요? 가끔 순서가 헷갈릴 수도 있습니다.

그리고 세션을 db에 저장을 할때는 사용자가 생성한 데이터는 user_data라는 필드에
serialize화해서 들어갈 겁니다. db의 내용 직접 보시려면 unserialize 하셔야 합니다.
pillar / 2010/07/16 13:22:17 / 추천 0
   function agree(){
        $joinType = $this->uri->segment(4); //세그먼트로 1이 넘어옴.
        $this->session->set_userdata('category', $joinType);       
        $category = $this->session->userdata('category');
        print_r($category); // 1이 출력됨, 헌데 요때 DB보면 0 들어가있넹!!!
        $this->load->view('goods/agree');
    }
  
    function name()
    {   
        $data['category'] = $this->session->userdata('category'); 
        print_r($data['category']);//0이 출력
        $this->load->view('goods/name', $data);       
    }

그런뎅 agree페이지 현시후 name호출전에 DB에서 세션테이블의 user_data필드 보면
a:1:{s:8:"category";s:1:"0";}
당연히 name에서는 0이 출력되는게고.
다른데선 절대 set_userdata하는 넘 없는데...ㅇㅇ
무슨 감툰지 정말 모르겠네요. ^^
그리고 serialize, unserialize는 잘 모르겠지만 여기 관계없을듯 한데..

pillar / 2010/07/16 18:03:53 / 추천 0
        $joinType = $this->uri->segment(4);   
        if($joinType == '0'){   
            $this->session->set_userdata('category', 0);
        }elseif($joinType == '1'){   
            $this->session->set_userdata('category', 1);   
        }elseif($joinType == '2'){   
            $this->session->set_userdata('category', 2);
        }
요렇게 하니 세션테이블에 정확한 값이 들어가네요...ㅇㅇ
이거 $this->uri->segment(4);때문인지 아님은 $this->session->set_userdata때문인지 정말 모르겠넨.
고수님들 해명 기대합니다