usare una tabella procurerebbe un database enorme...
phpbb in teoria funzia così:
appena l'utete entra avvia la sessione e contrassegna come "nuovi" tutti i messaggi che sono stati inviati dopo il suo ultimo "click" (dopo la sua ultima visita)
a quel punto appena un utente entra in un topic questo salva in un cookie la data e l'ora dell'ultimo accesso a quel topic...
così di ogni thread visitato in quella sessione l'utente sa cos'ha visto e cosa no...
ovviamente se fa il log out e rientra tutti i topics gli risultano come letti in quanto la sua ultima visita è recente ;)
in particolare questo è il codice di phpbb (viewtopic.php):
Codice PHP:
//
// Set a cookie for this topic
//
if ( $userdata['session_logged_in'] )
{
$tracking_topics = ( isset($HTTP_COOKIE_VARS[$board_config['cookie_name'] . '_t']) ) ? unserialize($HTTP_COOKIE_VARS[$board_config['cookie_name'] . '_t']) : array();
$tracking_forums = ( isset($HTTP_COOKIE_VARS[$board_config['cookie_name'] . '_f']) ) ? unserialize($HTTP_COOKIE_VARS[$board_config['cookie_name'] . '_f']) : array();
if ( !empty($tracking_topics[$topic_id]) && !empty($tracking_forums[$forum_id]) )
{
$topic_last_read = ( $tracking_topics[$topic_id] > $tracking_forums[$forum_id] ) ? $tracking_topics[$topic_id] : $tracking_forums[$forum_id];
}
else if ( !empty($tracking_topics[$topic_id]) || !empty($tracking_forums[$forum_id]) )
{
$topic_last_read = ( !empty($tracking_topics[$topic_id]) ) ? $tracking_topics[$topic_id] : $tracking_forums[$forum_id];
}
else
{
$topic_last_read = $userdata['user_lastvisit'];
}
if ( count($tracking_topics) >= 150 && empty($tracking_topics[$topic_id]) )
{
asort($tracking_topics);
unset($tracking_topics[key($tracking_topics)]);
}
$tracking_topics[$topic_id] = time();
setcookie($board_config['cookie_name'] . '_t', serialize($tracking_topics), 0, $board_config['cookie_path'], $board_config['cookie_domain'], $board_config['cookie_secure']);
}
vbulletin ce l'avrei anche qua... ma non perdo nemmeno tempo... perchè non so se si possono postare i sorgenti (penso di no... :/)
PS: ho notato solo ora guardando il codice che il massimo conteggio viene fatto per 150topics... oltre il cookie viene resettato e si riparte da zero...