fellybikush's picture
Upload 99 files
0dff816 verified
raw
history blame
3.92 kB
<?php
// db.php - Enhanced database connection with session support
class Database {
private $host = "127.0.0.1";
private $db_name = "jmdb";
private $username = "root";
private $password = "YourStrongPassword123"; // Set your MySQL password here
public $conn;
public function getConnection() {
$this->conn = null;
try {
$this->conn = new PDO(
"mysql:host=" . $this->host . ";dbname=" . $this->db_name . ";charset=utf8mb4",
$this->username,
$this->password
);
$this->conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$this->conn->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
} catch(PDOException $exception) {
error_log("Database connection error: " . $exception->getMessage());
throw new Exception("Database connection failed: " . $exception->getMessage());
}
return $this->conn;
}
}
class SessionManager {
private $db;
public function __construct($database) {
$this->db = $database->getConnection();
}
// Create new session
public function createSession($user_id, $ip_address = null, $user_agent = null) {
$session_id = bin2hex(random_bytes(64));
$expires_at = date('Y-m-d H:i:s', strtotime('+24 hours'));
$query = "INSERT INTO user_sessions
SET user_id = :user_id, session_id = :session_id, ip_address = :ip_address,
user_agent = :user_agent, expires_at = :expires_at";
$stmt = $this->db->prepare($query);
$stmt->bindParam(":user_id", $user_id);
$stmt->bindParam(":session_id", $session_id);
$stmt->bindParam(":ip_address", $ip_address);
$stmt->bindParam(":user_agent", $user_agent);
$stmt->bindParam(":expires_at", $expires_at);
if ($stmt->execute()) {
return $session_id;
}
return false;
}
// Validate session
public function validateSession($session_id) {
$query = "SELECT us.*, u.*
FROM user_sessions us
JOIN users u ON us.user_id = u.id
WHERE us.session_id = :session_id
AND us.is_active = 1
AND us.expires_at > NOW()";
$stmt = $this->db->prepare($query);
$stmt->bindParam(":session_id", $session_id);
$stmt->execute();
return $stmt->fetch(PDO::FETCH_ASSOC);
}
// Log activity
public function logActivity($user_id, $activity_type, $description = null, $ip_address = null, $user_agent = null) {
$query = "INSERT INTO user_activity_log
SET user_id = :user_id, activity_type = :activity_type, description = :description,
ip_address = :ip_address, user_agent = :user_agent";
$stmt = $this->db->prepare($query);
$stmt->bindParam(":user_id", $user_id);
$stmt->bindParam(":activity_type", $activity_type);
$stmt->bindParam(":description", $description);
$stmt->bindParam(":ip_address", $ip_address);
$stmt->bindParam(":user_agent", $user_agent);
return $stmt->execute();
}
// Update last login
public function updateLastLogin($user_id) {
$query = "UPDATE users SET last_login = NOW() WHERE id = :user_id";
$stmt = $this->db->prepare($query);
$stmt->bindParam(":user_id", $user_id);
return $stmt->execute();
}
}
// Initialize database and session manager
try {
$database = new Database();
$db = $database->getConnection();
$sessionManager = new SessionManager($database);
} catch(Exception $e) {
error_log("Initialization error: " . $e->getMessage());
$db = null;
$sessionManager = null;
}
?>