0) { db_execute_prepared('INSERT INTO sessions (id, remote_addr, access, data, user_id, user_agent) VALUES (?, ?, ?, ?, ?, ?) ON DUPLICATE KEY UPDATE data = VALUES(data), access = VALUES(access), user_agent = VALUES(user_agent), transactions = transactions + 1', [$id, $client_addr, $access, $data, $user_id, $user_agent]); } elseif (str_contains($data, 'ses_user_id')) { db_execute_prepared('INSERT INTO sessions (id, remote_addr, access, data, user_agent) VALUES (?, ?, ?, ?, ?) ON DUPLICATE KEY UPDATE data = VALUES(data), access = VALUES(access), user_agent = VALUES(user_agent), transactions = transactions + 1', [$id, $client_addr, $access, $data, $user_agent]); } return true; } function cacti_db_session_destroy(string $id) : bool { db_execute_prepared('DELETE FROM sessions WHERE id = ?', [$id]); return true; } function cacti_db_session_clean(mixed $max) : bool { if (!is_numeric($max)) { $old = time() - 14400; } else { $old = time() - intval($max); } db_execute_prepared('DELETE FROM sessions WHERE access < ?', [$old]); return true; } // register database session handling session_set_save_handler( 'cacti_db_session_open', 'cacti_db_session_close', 'cacti_db_session_read', 'cacti_db_session_write', 'cacti_db_session_destroy', 'cacti_db_session_clean' ); register_shutdown_function('session_write_close');