티스토리 뷰
study/WebProgramming
[CodeIgniter 3.0] 코드이그나이터 세션을 Database에 저장하여 사용하기
koreaparks 2015. 8. 19. 14:33코드이그나이터 세션 사용의 실패를 경험하다
코드이그나이터는 기본적으로 세션을 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
코드이그나이터는 기본적으로 세션을 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 버전은 아래와 같이 설정하시면 바로 적용됩니다.
application/config/config.php
파일을 에디터로 열어줍니다.
다음과 같이 sess_driver
와 sess_save_path
설정을 바꿔줍니다.
$config['sess_driver'] = 'database'; //디폴트값은 files로 되어 있을 것 입니다.
$config['sess_save_path'] = 'ci_sessions'; //데이터베이스 테이블명으로 사용됩니다. 바꾸셔도됩니다.
미리 설정해놓은 데이터베이스(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`)
);
만약, sess_match_ip
세팅을 켜두었다면 다음 명령어를 추가로 실행해줍니다.
ALTER TABLE ci_sessions ADD CONSTRAINT ci_sessions_id_ip UNIQUE (id, ip_address);
이제 다시 홈페이지에 접속하면 정상적으로 작동하는 것을 보실 수 있을 것입니다.
직접 php.ini
혹은 apache 설정
을 수정하여 safe_mode
설정을 off
시켜주면 됩니다.
단, 이 방법은 서버의 설정을 수정하지 못하는 상황이거나, 서버호스팅이 아닌 웹호스팅으로 관리를 할 때 난감한 상황이 찾아옵니다.
이럴때는 세션을 파일에 쓰지 않고 데이터베이스에 쓰도록 할 수 있습니다.
CI 2.x 버전은 설정이 약간 다르니 CI포럼의 USER GUIDE를 참고바랍니다.
CI 3.x 버전은 아래와 같이 설정하시면 바로 적용됩니다.
application/config/config.php
파일을 에디터로 열어줍니다.다음과 같이
sess_driver
와sess_save_path
설정을 바꿔줍니다.$config['sess_driver'] = 'database'; //디폴트값은 files로 되어 있을 것 입니다.
$config['sess_save_path'] = 'ci_sessions'; //데이터베이스 테이블명으로 사용됩니다. 바꾸셔도됩니다.미리 설정해놓은 데이터베이스(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`)
);만약,
sess_match_ip
세팅을 켜두었다면 다음 명령어를 추가로 실행해줍니다.ALTER TABLE ci_sessions ADD CONSTRAINT ci_sessions_id_ip UNIQUE (id, ip_address);
이제 다시 홈페이지에 접속하면 정상적으로 작동하는 것을 보실 수 있을 것입니다.
'study > WebProgramming' 카테고리의 다른 글
[CodeIgniter 3.0] 코드이그나이터 시작하기(설치, 기초사항 정리) (0) | 2015.05.21 |
---|---|
[JavaScript] Android/iOS UserAgent 구분 및 모바일웹페이지에서 앱 설치 여부 확인 (10) | 2015.01.15 |
HTML_ 자바스크립트(JAVASCRIPT) 기본 (0) | 2011.04.26 |
HTML_ 자바스크립트(JAVASCRIPT) 내장함수 (1) | 2011.04.10 |
HTML_ 자바스크립트(JAVASCRIPT) 기본 (0) | 2011.04.10 |
댓글