File size: 3,919 Bytes
0dff816
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
<?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;
}
?>