본문 바로가기
Programming/PHP

[코드이그나이터] 세션을 데이터베이스에 남기기

by Berasix 2022. 12. 28.
반응형

1. 문제 발생

 

호스팅을 사용하다 보니까 FileHandler를 사용해서 세션을 남기는데 좀 제약이 있었다.

모든 페이지에서 그러는 것은 아닌데 일부 페이지에서 다음으로 시작하는 오류가 나왔다.

 

Fatal error: Uncaught ErrorException: touch(): Unable to create file ci_sessions/ci_sessionfe6rr2vjkfvoak7t4gufs2g3a7bijprr because No such file or directory in /vendor/codeigniter4/framework/system/Session/Handlers/FileHandler.php:199 

 

저 FileHandler.php 에 가보면 아래와 같은 코드인데, 권한 문제로 보인다.

데이터베이스에 세션을 남기는 방식은 많이 사용되기 때문에 그것으로 변경하기로 했다.

        if ($this->fingerprint === md5($data)) {
            return ($this->fileNew) ? true : touch($this->filePath . $id);
        }

 

2. 문제 해결

 

방법은 .env 파일에서 설정을 손봐주는 것이다.

아래에 보듯이 sessionDriverDatabaseHandler로 변경해 주고, sessionSavePathci_sessions로 변경해 준다.

# app.sessionDriver = 'CodeIgniter\Session\Handlers\FileHandler'
app.sessionDriver = 'CodeIgniter\Session\Handlers\DatabaseHandler'
app.sessionCookieName = 'ci_session'
app.sessionExpiration = 7200
# app.sessionSavePath = null
app.sessionSavePath = 'ci_sessions'
app.sessionMatchIP = false
app.sessionTimeToUpdate = 300
app.sessionRegenerateDestroy = false

이제 Fatal 오류 없이 사용가능하다.

 

3. 메뉴얼 참고

https://codeigniter4.github.io/userguide/libraries/sessions.html?#databasehandler-driver 

 

Session Library — CodeIgniter 4.2.11 documentation

CodeIgniter will usually make everything work out of the box. However, Sessions are a very sensitive component of any application, so some careful configuration must be done. Please take your time to consider all of the options and their effects. You’ll

codeigniter4.github.io

 

이 글은 필자가 분석, 공부하면서 작성한 포스트입니다. 

잘못된 부분에 대해 알려주시면 수정하도록 하겠습니다.

728x90

댓글