What are common session handling issues in PHP CMS systems?

Issue: One common session handling issue in PHP CMS systems is the session fixation vulnerability, where an attacker can set the session ID before a user logs in, allowing them to hijack the session. To prevent this, regenerate the session ID after a successful login.

// Regenerate session ID after successful login
session_regenerate_id(true);
```

Issue: Another common issue is session hijacking, where an attacker steals a user's session ID and impersonates them. To prevent this, store additional information in the session data, such as user agent and IP address, and validate them on each request.

```php
// Store additional information in the session data
$_SESSION['user_agent'] = $_SERVER['HTTP_USER_AGENT'];
$_SESSION['user_ip'] = $_SERVER['REMOTE_ADDR'];

// Validate user agent and IP address on each request
if ($_SESSION['user_agent'] !== $_SERVER['HTTP_USER_AGENT'] || $_SESSION['user_ip'] !== $_SERVER['REMOTE_ADDR']) {
    // Handle invalid session
    session_destroy();
}
```

Issue: Session data tampering is another common problem, where an attacker modifies the session data to gain unauthorized access. To prevent this, encrypt and authenticate the session data using a secure method like HMAC.

```php
// Encrypt and authenticate session data using HMAC
$key = 'secret_key';
$encrypted_data = openssl_encrypt(serialize($_SESSION), 'AES-256-CBC', $key, 0, $iv);
$hash = hash_hmac('sha256', $encrypted_data, $key);

// Store encrypted data and hash in session
$_SESSION['encrypted_data'] = $encrypted_data;
$_SESSION['hash'] = $hash;

// Validate hash on each request
if (hash_hmac('sha256', $_SESSION['encrypted_data'], $key) !== $_SESSION['hash']) {
    // Handle invalid session
    session_destroy();
}