| 제목 | redis session 설정 질문 드립니다 | ||
|---|---|---|---|
| 카테고리 | PHP | ||
| 글쓴이 | worldwar3 | 작성시각 | 2022/02/17 17:17:48 |
|
|
|||
|
안녕하세요, 이번에 database 세션에서 redis 세션으로 변경하려고 하는데 제대로 동작하지 않아서 질문 드립니다.
일단 개발환경은 redis의 경우 네이버 클라우드 플랫폼에서 제공하는 서버를 사용하고, phpredis 설치해서 테스트 코드로 데이터 입력/출력 되는 것까지 브라우저/서버 양쪽에서 모니터링 성공했는데요,
config에 설정 적용한 뒤 세션이 유지가 되지않아 에러로그 찍어보니 system/libralies/Session.php에서 sess_write가 동작하면서 쿼리 문법 오류가 발생하더군요 (sess_table_name이 없어서 발생한 걸로 보입니다.)
데이터베이스는 작성하지 않으니 해당 동작 하지않게 $config['sess_use_database'] = FALSE; 로 적용했더니 쿠키만 작성하고 redis 서버는 조회하지 않았습니다.
redis 서버 접속이나 조회가 실패하는 건가 싶어서 system/libralies/Session/drivers/Session_redis_driver.php에 로그 찍어서 테스트 해봤는데 아무 로그도 안 찍히는 것을 보니 애초에 해당 드라이버를 사용하지 않는 걸로 보입니다.
현재 ci 상에선 config 설정을 아래처럼 했는데 서버나 ini 파일에서 추가적으로 redis를 사용하도록 수정이 필요한걸까요? $config['sess_driver'] = 'redis'; $config['sess_cookie_name'] = 'redis_'; $config['sess_expiration'] = 7200; $config['sess_save_path'] = 'tcp://my-naver-redis-server:6379'; $config['sess_use_database'] = FALSE; $config['sess_match_ip'] = FALSE; $config['sess_time_to_update'] = 300; $config['sess_regenerate_destroy'] = FALSE; $config['sess_expire_on_close'] = TRUE; $config['sess_encrypt_cookie'] = TRUE; $config['sess_match_useragent'] = FALSE;
제가 미처 고려하지 못한 부분 있으면 지적 부탁드립니다. 감사합니다. |
|||
| 다음글 | form_validation 질문드립니다!! (2) | ||
| 이전글 | 우분투 apache2+svn 쓰기권한 문제.. (1) | ||
|
테러보이
/
2022/02/18 13:16:02 /
추천
0
|
|
tuyitu719
안녕하세요. 지금처럼 system/libraries/Session.php 의 sess_write() 쪽에서 SQL 문법 오류가 나고, sess_table_name 이 없어서 DB 세션처럼 동작하는 흔적이 보인다면, 실제로는 Redis 드라이버까지 가지 못하고 예전 세션 흐름을 타고 있는 것에 가깝습니다. CI3 업그레이드 문서에도 예전 sess_use_database 를 쓰던 프로젝트는 기본 드라이버가 database 로 잡히는 하위 호환 로직이 있고, database 드라이버는 sess_table_name fallback 을 사용한다고 나와 있습니다. 즉, 질문에 적으신 증상은 “Redis 서버가 안 붙는다”기보다 프로젝트가 아직 CI3 방식으로 완전히 정리되지 않았다는 신호에 더 가깝습니다. 그래서 결론부터 말씀드리면, 서버나 php.ini 에서 추가로 session.save_handler=redis 를 꼭 넣어야 하는 상황은 아닐 가능성이 큽니다. CI3는 원래 자체 Redis 세션 드라이버를 가지고 있고, php.ini 의 session.save_handler/session.save_path 설정은 CI 드라이버를 쓰지 않고 PHP 세션 핸들러로 우회할 때의 다른 방법입니다. 이미 CI3 자체가 Redis 세션 드라이버를 제공하므로, 현재 단계에서는 php.ini 보다 어떤 세션 라이브러리가 실제 로딩되고 있는지를 먼저 확인하는 게 우선입니다. 우선 설정은 최소한으로 아래처럼 정리해서 테스트해 보시는 걸 권합니다. $config['sess_driver'] = 'redis'; 그리고 아래 값들은 일단 빼고 보시는 게 좋습니다. // 제거 권장 이 값들은 CI3 기준으로는 제거되었거나 하위 호환용이라, 지금 같은 혼선을 만들 가능성이 있습니다. 특히 sess_use_database 는 CI2 시절 설정이라 Redis 전환 중에는 아예 빼는 편이 안전합니다. 실제로는 아래 4가지를 먼저 확인하시면 됩니다. 한 줄로 정리하면, |
tcp://my-naver-redis-server:6379?database=1(또는 이름)
으로 해보세요.
ci4에서는 일단 정상 작동되네요