CI 코드

제목 flash 업로드시 세션문제 해결
글쓴이 마냐 작성시각 2009/08/13 02:20:33
댓글 : 4 추천 : 0 스크랩 : 0 조회수 : 15722   RSS
참고 : http://www.codeigniter-kr.org/qna/view/763/page/1

세션 클래스를 파헤쳤네요. ㄱ-
핵심만 알면 간단한 거였는데 구조를 파악하느라...

대상파일 : /libraries/Session.php

핵심구조 106 line
if ( ! $this->sess_read()) {
   $this->sess_create();
}
else {
  $this->sess_update();
}

<Start>

- 192 line 의 IF문 안에 IF문 추가.
// swfupload
if (trim($session['user_agent']) != 'Shockwave Flash' && $this->CI->input->user_agent() != 'Shockwave Flash') {
  $this->sess_destroy();
  return FALSE;
}
- 208 line 의 IF문 변경.
if ($this->sess_match_useragent == TRUE && trim($session['user_agent']) != 'Shockwave Flash') // swfupload
</End>

파폭은 관대해서 저렇게 안해도 잘되는데 말이죠.
IE6이 문제입니다.

FF와 IE6만 쓰는 중이라서... ㅡ_
 다음글 [팁] CI 협업작업하기 위한 세팅설정 (1)
 이전글 [팁] CI 중복배제 (1)

댓글

ci세상 / 2009/08/13 09:24:47 / 추천 0
좋은정보 감사드립니다.^^ 플래쉬 쿠키가 결국은 말썽을 부리는군요;;

<CI 포럼에 보니 세션 확장으로 해답을 주는것 같기도 한데요 맞는지 함 봐주세요>

http://codeigniter.com/forums/viewthread/100098/#555198

<확장세션 다운로드>
http://codeigniter.com/forums/viewthread/100098/#555198
변종원(웅파) / 2009/08/13 10:09:14 / 추천 0
코어 수정은 업데이트할때 그 부분을 또 수정해야 해서 ci세상님이 올리신 것처럼
ci세션을 확장하여 사용하는 방식으로 해야합니다.
ci로 사이트 1개만 관리할 것이면 상관없습니다. ^^
마냐 / 2009/08/13 12:08:32 / 추천 0
http://codeigniter.com/forums/viewthread/100098#555198

flash 업로드에서 post 값으로 현재 세션값을 전달.
ID는 $this->config->item('sess_cookie_name');
값은 $this->CI->input->cookie($this->sess_cookie_name);

업로드시 세션을 읽을때 sess_read() 에서 post로 넘긴 세션값을 적용.
post로 넘어온 값이 없으면 기존방식으로 처리
$session = $this->CI->input->post($this->sess_cookie_name);

이전의 세션값을 post로 넘겨 덮어 씌워버리는 방식입니다.
이전값을 덮어 씌워버리니 세션유지가 되겠지요.
----

제가 올린건 flash 에서 세션이 파기되지 않고 유지되도록 하는 방식이구요.

그런데 기존 CI_session의 sess_read() 함수를 재정의 하네요.
만약 세션코어의 sess_read() 가 패치되면 수정하는건 똑같겠네요.

현재 세션버그 때문에 1차 수정을 가한 상태인데 이게 고쳐지지 않으면 수정하는 건 똑같겠네요.
1.7.2에서도 세션언급은 없던데... ㄱ-
ci세상 / 2009/08/13 12:27:07 / 추천 0
그렇군요 ^^ 전 마냐님 코드가 다음버젼에 꼭 패치가 되어서 나오면 좋을것 같습니다.