티스토리 뷰

코드이그나이터 세션 사용의 실패를 경험하다

코드이그나이터는 기본적으로 세션을 file에 저장, 사용합니다. 
하지만 php의 설정이 맞지 않으면 다음과 비슷한 오류메시지를 확인 할 수 있습니다.

A PHP Error was encountered

Severity: Warning

Message: mkdir() [function.mkdir]: open_basedir restriction in effect. File() is not within the allowed path(s): (/tmp:/www/default/hosting_db:/www/****.com)

Filename: drivers/Session_files_driver.php

Line Number: 117

Backtrace:

File: /www/****.com/application/controllers/Home.php
Line: 4
Function: __construct

File: /www/****.com/index.php
Line: 292
Function: require_once

해결방법

직접 php.ini 혹은 apache 설정을 수정하여 safe_mode 설정을 off 시켜주면 됩니다. 
단, 이 방법은 서버의 설정을 수정하지 못하는 상황이거나, 서버호스팅이 아닌 웹호스팅으로 관리를 할 때 난감한 상황이 찾아옵니다.

이럴때는 세션을 파일에 쓰지 않고 데이터베이스에 쓰도록 할 수 있습니다.

CI 2.x 버전은 설정이 약간 다르니 CI포럼의 USER GUIDE를 참고바랍니다. 
CI 3.x 버전은 아래와 같이 설정하시면 바로 적용됩니다.

  1. application/config/config.php 파일을 에디터로 열어줍니다.

  2. 다음과 같이 sess_driver와 sess_save_path 설정을 바꿔줍니다.

    $config['sess_driver'] = 'database';  //디폴트값은 files로 되어 있을 것 입니다.
    $config['sess_save_path'] = 'ci_sessions'; //데이터베이스 테이블명으로 사용됩니다. 바꾸셔도됩니다.
  3. 미리 설정해놓은 데이터베이스(MySQL 기준)에 테이블을 추가합니다. 
    테이블명은 바로 위에서 설정한 sess_save_path값과 일치해야 합니다.

    CREATE TABLE IF NOT EXISTS `ci_sessions` (
    `id` varchar(40) NOT NULL,
    `ip_address` varchar(45) NOT NULL,
    `timestamp` int(10) unsigned DEFAULT 0 NOT NULL,
    `data` blob NOT NULL,
    PRIMARY KEY (id),
    KEY `ci_sessions_timestamp` (`timestamp`)
    );

  4. 만약, sess_match_ip 세팅을 켜두었다면 다음 명령어를 추가로 실행해줍니다.

    ALTER TABLE ci_sessions ADD CONSTRAINT ci_sessions_id_ip UNIQUE (id, ip_address);

이제 다시 홈페이지에 접속하면 정상적으로 작동하는 것을 보실 수 있을 것입니다.


댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday