질문 Q #12501
Unable to locate the specified class: Session.php
pwrlove 2015-09-14 12:35:12
2.2 에서 3.0.1 로 업그레이드 했는데, Unable to locate the specified class: Session.php
메시지만 나오고 페이지 이동이 안됩니다.
구글링에도 많이 저 오류가 나오던데, Stack Overflow에 있는 내용대로 해 봐도 
안됩니다. ㅠㅠ


혹시 같은 오류 겪으시분들 있으신가요?
2.2에서는 전혀 오류가 없습니다.
답변 16
#1 한대승(불의회상) 2015-09-14 13:33:39
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');
#2 pwrlove 2015-09-14 13:48:26
아, 답변 주셔서 감사합니다.
저도 마이그레이션 내역에 그게 있어서 바꿔 봤는데, 동일한 오류가 계속 납니다.
ㅠㅠ
#3 한대승(불의회상) 2015-09-14 14:30:41
에러 메시지만 볼때 Session.php 파일을 로드 하지 못해 발생한 것으로 보이는데요.
CI 버젼과 system 폴더 위치를 확인해 보세요.
 
        var_dump(CI_VERSION);
        var_dump(realpath(BASEPATH));
#4 pwrlove 2015-09-14 15:06:14
알려주신대로 찍은 로그 입니다.
경로는 제가 보기엔 별 이상이 없는것으로 보입니다.
세션 파일을 로드하지 못할 이유를 마땅히 알 수가 없습니다.

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';
#5 pwrlove 2015-09-14 15:29:15
로그인이 정상적으로 되는 것을 봐서는
세션이 로드되지 않은 것 같지는 않는데,
로그인 이후, 메인 페이지에서 메뉴를 선택해 다른 페이지를 이동할 경우, 저 메시지가 나옵니다.
 
#6 한대승(불의회상) 2015-09-14 15:34:52
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;
#7 pwrlove 2015-09-14 16:01:49
관심가져 주시고, 답변 주셔서 너무 감사합니다.

제가 설정을 바꿔보는 과정에서 잠시 빠졌던것 같습니다.
'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;

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

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

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

생각해 보면 별문제 아닐것 같다는 희망도 생깁니다.
#10 pwrlove 2015-09-15 10:29:09
  • 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.

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

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

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

감사합니다.
#15 प्यार 2017-02-06 15:11:52

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

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

#16 홍구2 2019-10-09 13:46:54
혹시 라이브러리 클래스와 현재 컨트롤러 클래스 중 이름이 중복되는 것이 없는지 확인해보시면 될 듯 합니다.