*/ public string $driver = RedisHandler::class; /** * -------------------------------------------------------------------------- * Session Cookie Name * -------------------------------------------------------------------------- * * The session cookie name, must contain only [0-9a-z_-] characters */ public string $cookieName = 'ci_session'; /** * -------------------------------------------------------------------------- * Session Expiration * -------------------------------------------------------------------------- * * The number of SECONDS you want the session to last. * Setting to 0 (zero) means expire when the browser is closed. */ public int $expiration = 7200; /** * -------------------------------------------------------------------------- * Session Save Path * -------------------------------------------------------------------------- * * The location to save sessions to and is driver dependent. * * For the 'database' driver, it's a table name. * For Redis: tcp://host:port?database=n&password=xxx * * IMPORTANT: You are REQUIRED to set a valid save path! */ public string $savePath; public function __construct() { parent::__construct(); // 환경변수로 강제로 Database 모드 설정 가능 (Redis 장애 시 수동 전환) $forceDatabase = env('SESSION_FORCE_DATABASE', false); // Redis 설정: Redis 연결 실패 시 Database로 폴백 if ($this->driver === RedisHandler::class && !$forceDatabase) { helper('redis'); try { // Redis 연결 테스트 $testRedis = get_redis_connection('session'); if (!$testRedis) { throw new \Exception('Redis connection failed'); } // Redis 정상 - Redis 설정 사용 $config = get_redis_config('session'); $this->savePath = sprintf( 'tcp://%s:%s?database=%s', $config['host'], $config['port'], $config['database'] ); if (!empty($config['password'])) { $this->savePath .= '&password=' . $config['password']; } } catch (\Exception $e) { // Redis 실패 - DatabaseHandler로 폴백 log_message('warning', 'Session: Redis unavailable (' . $e->getMessage() . '), falling back to DatabaseHandler'); $this->driver = DatabaseHandler::class; $this->savePath = 'ci_sessions'; // 테이블 이름 } } else { // Database 강제 모드 또는 기본 Database 설정 if ($forceDatabase && $this->driver === RedisHandler::class) { log_message('info', 'Session: Forced to use DatabaseHandler (SESSION_FORCE_DATABASE=true)'); $this->driver = DatabaseHandler::class; } $this->savePath = 'ci_sessions'; } } /** * -------------------------------------------------------------------------- * Session Match IP * -------------------------------------------------------------------------- * * Whether to match the user's IP address when reading the session data. * * WARNING: If you're using the database driver, don't forget to update * your session table's PRIMARY KEY when changing this setting. */ public bool $matchIP = false; /** * -------------------------------------------------------------------------- * Session Time to Update * -------------------------------------------------------------------------- * * How many seconds between CI regenerating the session ID. */ public int $timeToUpdate = 300; /** * -------------------------------------------------------------------------- * Session Regenerate Destroy * -------------------------------------------------------------------------- * * Whether to destroy session data associated with the old session ID * when auto-regenerating the session ID. When set to FALSE, the data * will be later deleted by the garbage collector. */ public bool $regenerateDestroy = false; /** * -------------------------------------------------------------------------- * Session Database Group * -------------------------------------------------------------------------- * * DB Group for the database session. */ public ?string $DBGroup = null; /** * -------------------------------------------------------------------------- * Lock Retry Interval (microseconds) * -------------------------------------------------------------------------- * * This is used for RedisHandler. * * Time (microseconds) to wait if lock cannot be acquired. * The default is 100,000 microseconds (= 0.1 seconds). */ public int $lockRetryInterval = 100_000; /** * -------------------------------------------------------------------------- * Lock Max Retries * -------------------------------------------------------------------------- * * This is used for RedisHandler. * * Maximum number of lock acquisition attempts. * The default is 300 times. That is lock timeout is about 30 (0.1 * 300) * seconds. */ public int $lockMaxRetries = 300; }