require_once('connections/dbinfo/DataBaseConnInfoMysql.php');
function customNewConnect(){
$conn_new = new DataBaseConnInfoMysql();
$dsn = 'mysql:host='. $conn_new->host.';dbname='. $conn_new->dbname;
if ($conn_new->port) {
$dsn .= ";port=".$conn_new->port;
}
try {
// Attempt to establish a database connection
$pdo = new PDO($dsn, $conn_new->username, $conn_new->password);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// Check if the database connection is valid
if ($pdo) {
return $pdo;
} else {
echo "Database Connection Error: Failed to establish connection";
return false;
}
} catch(PDOException $e) {
// Handle database connection errors
echo "Database Connection Error: " . $e->getMessage() . "
";
echo "DSN: " . $dsn; // Output the DSN for debugging
return false;
}
}
function CustomQueryPDO($query) {
$conn_new = new DataBaseConnInfoMysql();
$dsn = 'mysql:host='. $conn_new->host.';dbname='. $conn_new->dbname;
if ($conn_new->port) {
$dsn .= ";port=".$conn_new->port;
}
try {
// Attempt to establish a database connection
$pdo = new PDO($dsn, $conn_new->username, $conn_new->password);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// Check if the database connection is valid
if ($pdo) {
return $pdo->query($query);
} else {
echo "Database Connection Error: Failed to establish connection";
return false;
}
} catch(PDOException $e) {
// Handle database connection errors
echo "Database Connection Error: " . $e->getMessage() . "
";
echo "DSN: " . $dsn; // Output the DSN for debugging
return false;
}
}
// Custom session open function
function custom_session_open($save_path, $session_name) {
// No need to establish a database connection here
return true; // Return true on success
}
// Custom session close function
function custom_session_close() {
// No need to close the database connection here
return true; // Return true on success
}
// Custom session read function
function custom_session_read($session_id) {
$pdo = customNewConnect();
try {
$query = 'SELECT session_data FROM active_sessions WHERE session_id = ?';
$stmt = $pdo->prepare($query);
$stmt->bindParam(1, $session_id);
$stmt->execute();
$row = $stmt->fetch(PDO::FETCH_ASSOC); // Use fetch instead of fetchAll
if ($row) {
return $row['session_data']; // Return session data
} else {
return ''; // Return empty string if session data not found
}
} catch(PDOException $e) {
error_log("Error reading session data: " . $e->getMessage());
return false; // Return false on failure
}
}
// Custom session write function
// Custom session write function
function custom_session_write($session_id, $session_data) {
$query = "INSERT INTO active_sessions (session_id, session_data, last_updated) VALUES (?, ?, NOW()) ON DUPLICATE KEY UPDATE session_data = VALUES(session_data), last_updated = VALUES(last_updated)";
try {
$pdo = customNewConnect();
$stmt = $pdo->prepare($query);
$stmt->bindParam(1, $session_id);
$stmt->bindParam(2, $session_data);
$stmt->execute();
return true; // Return true on success
} catch(PDOException $e) {
echo "Error writing session data: " . $e->getMessage();
return false; // Return false on failure
}
}
// Custom session destroy function
function custom_session_destroy($session_id) {
$query = "DELETE FROM active_sessions WHERE session_id = :session_id";
try {
$stmt = CustomQueryPDO($query);
if ($stmt) {
$stmt->bindParam(':session_id', $session_id);
$stmt->execute();
return true; // Return true on success
}
} catch(PDOException $e) {
echo "Error destroying session: " . $e->getMessage();
}
return false; // Return false on failure
}
// Custom session garbage collection function
function custom_session_gc($maxlifetime) {
$inactive_threshold = time() - $maxlifetime;
$query = "DELETE FROM active_sessions WHERE last_updated < FROM_UNIXTIME(:inactive_threshold)";
try {
$stmt = CustomQueryPDO($query);
if ($stmt) {
$stmt->bindParam(':inactive_threshold', $inactive_threshold, PDO::PARAM_INT);
$stmt->execute();
return true; // Return true on success
}
} catch(PDOException $e) {
echo "Error performing garbage collection: " . $e->getMessage();
}
return false; // Return false on failure
}
// Set custom session handling functions
session_set_save_handler(
'custom_session_open',
'custom_session_close',
'custom_session_read',
'custom_session_write',
'custom_session_destroy',
'custom_session_gc'
);