CI 묻고 답하기

제목 Unable to locate the specified class: Session.php
글쓴이 pwrlove 작성시각 2015/09/14 12:05:12
댓글 : 16 추천 : 0 스크랩 : 0 조회수 : 25424   RSS
2.2 에서 3.0.1 로 업그레이드 했는데, Unable to locate the specified class: Session.php
메시지만 나오고 페이지 이동이 안됩니다.
구글링에도 많이 저 오류가 나오던데, Stack Overflow에 있는 내용대로 해 봐도 
안됩니다. ㅠㅠ


혹시 같은 오류 겪으시분들 있으신가요?
2.2에서는 전혀 오류가 없습니다.
 다음글 js에서 컨트롤안에 함수 호출하는 방법.. (1)
 이전글 이메일 전송 실패가 되는데, 원인을 알 수 있을까요? (4)

댓글

한대승(불의회상) / 2015/09/14 13:03:39 / 추천 0
3.X 부터는 세션이 라이브러리에서 드라이버로 바뀌었습니다.
컨트롤러/모델에서 사용하시에는 변화가 없지만 autoload.php에 등록시 library 가 아니라 driver 에 등록해 줘야 사용이 가능 합니다.
 
/*
  | -------------------------------------------------------------------
  |  Auto-load Drivers
  | -------------------------------------------------------------------
  | These classes are located in the system/libraries folder or in your
  | application/libraries folder within their own subdirectory. They
  | offer multiple interchangeable driver options.
  |
  | Prototype:
  |
  | $autoload['drivers'] = array('session', 'cache');
 */

$autoload['drivers'] = array('session');
pwrlove / 2015/09/14 13:18:26 / 추천 0
아, 답변 주셔서 감사합니다.
저도 마이그레이션 내역에 그게 있어서 바꿔 봤는데, 동일한 오류가 계속 납니다.
ㅠㅠ
한대승(불의회상) / 2015/09/14 14:00:41 / 추천 0
에러 메시지만 볼때 Session.php 파일을 로드 하지 못해 발생한 것으로 보이는데요.
CI 버젼과 system 폴더 위치를 확인해 보세요.
 
        var_dump(CI_VERSION);
        var_dump(realpath(BASEPATH));
pwrlove / 2015/09/14 14:36:14 / 추천 0
알려주신대로 찍은 로그 입니다.
경로는 제가 보기엔 별 이상이 없는것으로 보입니다.
세션 파일을 로드하지 못할 이유를 마땅히 알 수가 없습니다.

string(5) "3.0.1"
string(44) "C:\Project\Test\www\CodeIgniter-3.0.1\system"

세션 클래스는 아래의 경로에 있습니다.

C:\Project\Test\www\CodeIgniter-3.0.1\system\libraries\Session\Session.php

아래와 같이 설정되어 있습니다.
//----------------------------------------------------
<autoload.php>
$autoload['libraries'] = array(
    'database'
);
$autoload['drivers'] = array(
    'Session'
);

​//----------------------------------------------------
<config.php>
$config['sess_cookie_name']        = 'ci_session';
$config['sess_expiration']        = 7200;
$config['sess_expire_on_close'] = FALSE;
$config['sess_encrypt_cookie']  = TRUE;
$config['sess_use_database']    = FALSE;
$config['sess_table_name']        = 'ci_sessions';
$config['sess_match_ip']        = FALSE;
$config['sess_match_useragent'] = TRUE;
$config['sess_time_to_update']    = 300;

$config['encryption_key'] = 'cTC0nn7w08YDll11i8Q5v1Z396411PfF';
pwrlove / 2015/09/14 14:59:15 / 추천 0
로그인이 정상적으로 되는 것을 봐서는
세션이 로드되지 않은 것 같지는 않는데,
로그인 이후, 메인 페이지에서 메뉴를 선택해 다른 페이지를 이동할 경우, 저 메시지가 나옵니다.
 
한대승(불의회상) / 2015/09/14 15:04:52 / 추천 0
3.0 부터는 config.php에 "session_driver" 라는 항목이 추가 되었습니다.
아래 설정을 확인 하거나 CI 3.0.1을 다운 받아 config/config.php 파일 확인하여 보세요.
 
$config['sess_driver'] = 'files';
$config['sess_cookie_name'] = 'ci_session';
$config['sess_expiration'] = 7200;
$config['sess_save_path'] = NULL;
$config['sess_match_ip'] = FALSE;
$config['sess_time_to_update'] = 300;
$config['sess_regenerate_destroy'] = FALSE;
pwrlove / 2015/09/14 15:31:49 / 추천 0
관심가져 주시고, 답변 주셔서 너무 감사합니다.

제가 설정을 바꿔보는 과정에서 잠시 빠졌던것 같습니다.
'database', 'file' 도 모두 해 봤습니다.

지금은 아래와 같이 설정되어 있고, 오류도 여전히 발생됩니다.

$config['sess_driver']            = 'database';
$config['sess_cookie_name']        = 'ci_session';
$config['sess_expiration']        = 7200;
$config['sess_expire_on_close'] = FALSE;
$config['sess_encrypt_cookie']  = TRUE;
$config['sess_use_database']    = TRUE;
$config['sess_table_name']        = 'ci_sessions';
$config['sess_match_ip']        = FALSE;
$config['sess_match_useragent'] = TRUE;
$config['sess_time_to_update']    = 300;

다른쪽의 오류를 좀 더 찾아 보겠습니다.
 
IamMonk / 2015/09/14 21:25:19 / 추천 0
혹시 autoload에 있는 Session의 앞머리 S가 대문자여서 그런건 아닌가 하는 바보같은 의견을 조심스럽게 던져봅니다.
pwrlove / 2015/09/15 09:31:19 / 추천 0
IamMonk님 안녕하세요?
합리적인 의심이라고 생각합니다.
저 역시도 그렇게 판단했고, 바꿔 봤었는데 별 영향이 없는것 같더라구요.

제가 어떤 문제를 만나면 Stack Overflow를 검색해 보는데, 거기도 동일한 답변이 있었습니다.

한국엔 Stack Overflow같은 싸이트가 없어서 아쉽지만, 적어도 여기서 코드이그나이터에 대해선 작은것이라도
정보를 공유할 수 있다면 좋을 것 같습니다.
다시한번 감사드리고, 이 문제가 뭔지 꼭 해결해서 답을 올리도록 하겠습니다.
지금은 우선 만들고 있는게, 2.2버전에서는 별 문제 없이 잘 되고 있어서
진도 부터 나가고 추후 3.x에 다시 한번 시도를 해 볼 예정입니다.

생각해 보면 별문제 아닐것 같다는 희망도 생깁니다.
pwrlove / 2015/09/15 09:59:09 / 추천 0
  • Remove $config['sess_match_useragent']

    The user-agent string is input supplied by the user’s browser, or in other words: client side input. As such, it is an ineffective feature and hence why it has been removed.

  • Remove $config['sess_encrypt_cookie']

    As already noted, the library no longer uses cookies as a storage mechanism, which renders this option useless.

  • Remove $config['sess_expire_on_close']

    This option is still usable, but only for backwards compatibility purposes and it should be otherwise removed. The same effect is achieved by setting $config['sess_expiration'] to 0.

    참고로 위의 내용대로 테스트 다 해 봤습니다.
    위에 캡처한 내용은 테스트를 위해서 일부러 넣어 봤는데, 그걸 복사해서 붙였네요.
    혹시 위의 내용을 누군가 답변으로 올릴까봐 미리 알려드립니다.

pwrlove / 2015/09/15 13:04:17 / 추천 0
혹시 PHP 버전과 상관이 있을까요?
5.3.21 인데 영향이 있을까요?
 
한대승(불의회상) / 2015/09/15 13:28:25 / 추천 0
@pwrlove 그럴수도 있고 아닐수도 있습니다.
현재 주어지는 정보만으로는 더 이상 조언 드리기가 힘들것 같네요.
변종원(웅파) / 2015/09/15 14:54:16 / 추천 0
http://www.codeigniter.com/user_guide/general/requirements.html

매뉴얼에선 5.4 이상을 추천하고 있습니다.
pwrlove / 2015/09/15 16:14:27 / 추천 0
네, 저도 저 내용을 봐서 늘 맘에 걸렸는데,
당장은 PHP 버전을 바꾸기 쉽지가 않아서, 혹시 바꾸게되면
확인해 보고 결과를 다시 올리겠습니다.

감사합니다.
प्यार / 2017/02/06 14:41:52 / 추천 0

저도 라이프러리에서 안되는 경우였는데 라이브러리가 컨트롤러를 상속받아 안되는 경우였습니다.

get_instance()가 controller를 잘못 받아와서 생기는 문제더라구요. 상속받은 클래스를 다시 살펴보세요.