Prueba de quitar estás líneas:
Código PHP:
if ( !(isset($HTTP_COOKIE_VARS[$cookiename . '_sid']) || isset($HTTP_COOKIE_VARS[$cookiename . '_data'])) )
{
output_add_rewrite_var('sid', $userdata['session_id']);
}
A ver si es por eso. Es que a mí me ha pasado que dependiendo de la versión de php en algunos servidores la función output_add_rewrite_var no funciona bien si los links a los que añade la variable ya tienen paso de valores.
Salu2 ;) (lo malo es que quitando eso no perduraría la sesión si el cliente tiene desactivadas las cookies y entonces deberás de añadir manualmente en todos los links el sid -> $userdata['session_id'])