Questo è il codice della pagina in cui si verifica il problema
codice:
<?php 
include 'header.inc.php'; 

$db = mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASSWORD) or die('Unable to connect. Check your connection parameters.');
mysql_select_db(MYSQL_DB, $db);

if (isset($_SESSION['access_level']) && $_SESSION['access_level'] > 1) {
    if (isset($_REQUEST['action']) && $_REQUEST['action'] == 'search') {
        $keyword = $_REQUEST['keyword'];
    } else {
        $keyword = '';
    }
?>
<div id="navigation">
    ...
</div>
<div id="content">
    <div id="tabs">
        <ul>
            <?php echo ($_SESSION['access_level'] == 3) ? '[*]Utenti' : ''; ?>[*]News
            <?php echo ($_SESSION['access_level'] == 3) ? '[*]FAQ' : ''; ?>[/list]
<?php
    if ($_SESSION['access_level'] == 3) { 
?>
        <div id="tabs-1">
            


                Di seguito &egrave; riportata una tabella contenente la lista 
                degli utenti registrati sul sistema; ...
            </p>    
            <table id="users_table">
                <caption>
                    <div style="margin-bottom: 10px; text-align: right;">
                        <form id="search_form" action="cpanel.php#tabs-1" method="post">
                            <input class="text_field" type="text" name="keyword" size="30" autofocus/>
                            <input type="hidden" name="action" value="search" />
                        </form>
                    </div>
<?php
        if (isset($_REQUEST['keyword']) && !empty($_REQUEST['keyword'])) {
            $keyword = $_REQUEST['keyword'];
            $query = 'SELECT
                    *
                FROM 
                    all_users
                WHERE
                    first_name LIKE "%' . mysql_real_escape_string($keyword, $db) . '%" OR ' .
                    'last_name LIKE "%' . mysql_real_escape_string($keyword, $db) . '%" OR ' .
                    'email LIKE "%' . mysql_real_escape_string($keyword, $db) . '%"';
            $result = mysql_query($query, $db) or die(mysql_error($db));
            echo '<div>';
            if (mysql_affected_rows($db) > 0) {
                echo '

La ricerca per ' . $keyword . ' ha fornito i seguenti risultati...</p>';
            } else {
                echo 'La ricerca non ha fornito alcun risultato.';
                echo '<tr><td colspan="6" style="text-align: center;">Nessun risultato</td></tr>';
            }
            echo '</div>';
        } else {
            $query = 'SELECT * FROM all_users';
            $result = mysql_query($query, $db) or die(mysql_error($db));
        }
?>                    
                </caption>
                <thead>
                    <tr>
                        <th class="id_column">ID</th>
                        <th>Cognome</th>
                        <th>Nome</th>
                        <th class="email_column">Email</th>
                        <th class="action_column">Azioni</th>
                        <th class="active_column">Attivo</th>
                    </tr>
                </thead>
                <tbody>
<?php
        while ($row = mysql_fetch_array($result)) {
            extract($row);
            //costruisco la tabella
        }
        mysql_free_result($result);
?>
                </tbody>
            </table>
<?php
        $query = 'SELECT COUNT(user_id) AS num_users FROM all_users';
        $result = mysql_query($query, $db) or die(mysql_error($db));
        $row = mysql_fetch_array($result);
?>    
            <div>
                

Sul sistema sono registrati un totale di <?php echo $row['num_users']; ?> utenti.</p>
            </div>
        </div>
<?php
    }
?>        
        <div id="tabs-2">
            


                Di seguito &egrave; riportata una tabella contenente la lista 
                delle news...
            </p>
            <table id="news_table">
                <caption>
                    <div style="margin-bottom: 10px; text-align: right;">
                        <form id="search_form" action="cpanel.php#tabs-2" method="post">
                            <input class="text_field" type="text" name="keyword" size="30" autofocus/>
                            <input type="hidden" name="action" value="search" />
                        </form>
                    </div>
<?php
        $query = 'SELECT 
                news_id, user_id, is_published, submit_date, publish_date, title, news_text 
            FROM 
                all_news ';
        if ($_SESSION['access_level'] == 2) {
            $query .= 'WHERE user_id = ' . $_SESSION['user_id'] . ' ';
        }
        $query .= 'ORDER BY news_id';
        $result = mysql_query($query, $db) or die(mysql_error($db));
?>                    
                </caption>
                <thead>
                    <tr>
                        <th class="id_column">ID</th>
                        <th>Editore</th>
                        <th class="pub_column">Pubblicata</th>
                        <th class="saved_column">Salvataggio</th>
                        <th class="publi_column">Pubblicazione</th>
                        <th class="action_column">Azioni</th>
                    </tr>
                </thead>
                <tbody>
<?php
        if (mysql_affected_rows() == 0) {
            echo '<tr><td colspan="6" style="text-align: center;">Non ci sono news pubblicate</td></tr>';
        } else {
            while ($row = mysql_fetch_array($result)) {
                extract($row);
                // costruisco la tabella
            }
        }
        mysql_free_result($result);
?>
                </tbody>
            </table>
<?php
        if ($_SESSION['access_level'] == 3) {
            $query = 'SELECT COUNT(user_id) AS num_news FROM all_news';
            $result = mysql_query($query, $db) or die(mysql_error($db));
            $row = mysql_fetch_array($result);
?>    
            <div>
                

Sul sistema sono salvate un totale di <?php echo $row['num_news']; ?> news.</p>
            </div>
<?php
        }
?>
        </div>
<?php
    if ($_SESSION['access_level'] == 3) { 
?>        
        <div id="tabs-3">
            


                Di seguito &egrave; riportata una tabella contenente la lista 
                delle faq...
            </p>
            <table id="faqs_table">
                <caption></caption>
                <thead>
                    <tr>
                        <th class="id_column">ID</th>
                        <th class="email_column">Email</th>
                        <th class="name_column">Nome</th>
                        <th class="action_column">Azioni</th>
                    </tr>
                </thead>
                <tbody>
<?php
$query = 'SELECT * FROM all_faqs';
$result = mysql_query($query, $db) or die(mysql_error($db));
if (mysql_affected_rows($db) == 0) {
    echo '<tr><td colspan="6" style="text-align: center;">Non ci sono faq pubblicate</td></tr>';
} else {
    while ($row = mysql_fetch_array($result)) {
        extract($row);
        // costruisco la tabella
}
?>
                </tbody>
            </table>
        </div>
<?php
    }
?>
    </div>
</div>
<?php
} else {
    redirect('index.php');
}

include 'footer.inc.php';
?>
il footer.inc.php non contiene nulla a parte del puro codice html mentre in header.inc.php c'è questo

codice:
<?php

session_start();

require 'utils/http_functions.php';
require 'utils/config.inc.php';
require 'utils/db.inc.php';

$db = mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASSWORD) or die('Unable to connect. Check your connection parameters.');
mysql_select_db(MYSQL_DB, $db);

// controllo se la sessione è valida
if (isset($_SESSION['lifetime'])) {
    if (time() - $_SESSION['lifetime'] > SESSION_TTL) {
        // no
        session_unset();
        session_destroy();

        // controllo se esiste il cookie
        if (isset($_COOKIE['sito'])) {
            // si, rigenero la sessione dal cookie
            // estraggo le informazioni dal cookie
            $email = $_COOKIE['sito'][0];
            $password = $_COOKIE['sito'][1];
            
            // recupero i dati da db
            $query = 'SELECT
                    user_id, password, access_level, last_name
                FROM
                    all_users
                WHERE
                    MD5(email) = "' . mysql_real_escape_string($email, $db) . '" AND
                    MD5(password) = "' . mysql_real_escape_string($password, $db) . '" AND
                    is_active = TRUE';
            echo $query;
            $result = mysql_query($query, $db) or die(mysql_error($db));
            if (mysql_num_rows($result) > 0) {
                $row = mysql_fetch_array($result);
                extract($row);
                session_start();
                $session_data = array(
                    'user_id' => $user_id,
                    'access_level' => $access_level,
                    'lifetime' => time()
                );
                $_SESSION = $session_data;
                
                redirect($_SERVER['PHP_SELF']);
            } else {
                // le informazioni non sono corrette si deduce che è un accesso non autorizzato
                $exp_date = time() - COOKIE_TTL;
                setcookie('sito[0]', null, $exp_date);
                setcookie('sito[1]', null, $exp_date);
                redirect('error.php?from=home&errno=2');
            }
        } else {
            // la sessione è scaduta e non è recuperabile
            // redirezione alla pagina di errore [sessione scaduta]
            redirect('error.php?from=home&errno=1');
        }
    }
    
    // la sessione è ancora valida e quindi non faccio nulla
} else {
    // la sessione non è valida
    // controllo se esiste il cookie
    if (isset($_COOKIE['sito'])) { 
        // si, rigenero la sessione dal cookie
        // estraggo le informazioni dal cookie
        $email = $_COOKIE['sito'][0];
        $password = $_COOKIE['sito'][1];

        // recupero i dati da db
        $query = 'SELECT
                user_id, password, access_level, last_name
            FROM
                all_users
            WHERE
                MD5(email) = "' . mysql_real_escape_string($email, $db) . '" AND
                MD5(password) = "' . mysql_real_escape_string($password, $db) . '" AND
                is_active = TRUE';
        echo $query;
        $result = mysql_query($query, $db) or die(mysql_error($db));
        if (mysql_num_rows($result) > 0) {
            $row = mysql_fetch_array($result);
            extract($row);
            session_start();
            $session_data = array(
                'user_id' => $user_id,
                'access_level' => $access_level,
                'lifetime' => time()
            );
            $_SESSION = $session_data;
            
            redirect($_SERVER['PHP_SELF']);
        } else {
            // le informazioni non sono corrette si deduce che è un accesso non autorizzato
            $exp_date = time() - COOKIE_TTL;
            setcookie('sito[0]', null, $exp_date);
            setcookie('sito[1]', null, $exp_date);
            
            redirect('error.php?from=home&errno=2');
        }
    }
}
// faccio il refresh della sessione se ne esiste una valida
if (isset($_SESSION['lifetime'])) {
    $_SESSION['lifetime'] = time();
}
?>
...
http_functions contiene una funzione che mi fa il redirect mentre config e db contengono solo delle define.
Ho cercato di essere il più conciso possibile nel postare il codice, scusate per la lunghezza, ma non volevo omettere dettagli che potevano rivelarsi fondamentali.