A parte le giustissime osservazioni di Simo990 con le quali concordo dato che il tuo codice è, perdonami, un obbrobrio!

E' ovvio che $_SESSION['pagina'] abbia prima un valore e poi un altro. Ragionando semplicemente con logica, tu valorizzi $_SESSION['pagina'] in base alla pagina in cui ti trovi non sapendo a priori l'operazione che l'utente effettuerà (avanti, dietro, ecc.)
Quindi, al click sul link in $_SESSION['pagina'] avrai l'ultimo valore inserito

Codice PHP:
<html>
<head>

<title>Annunci case ad........</title>

</head>
<body>
<link rel="stylesheet" type="text/css" href="stileprova.css">

<?php 

require ("mysql.php");  
require (
"crea_menu.php");
echo 
"
 <font color='red'>ses[pag]:"
.$_SESSION['pagina']."
</font>"
;
testata();
echo 
"
 <font color='red'>ses[pag]:"
.$_SESSION['pagina']."
</font>"
;
...
solo successivamente, in base all'operazione scelta esso viene aggiornato:

Codice PHP:
...
if (isset(
$_GET['inviapag'])) 
    {
    if ((
$_GET['inviapag']=='indietro')||($_GET['inviapag']=='avanti')||($_GET['inviapag']=='prima')||($_GET['inviapag']=='ultima'))
        {
        echo 
"
 ses[pag]:"
.$_SESSION['pagina']."
"
;
        if (
$_GET['inviapag']=='indietro'$_SESSION['pagina']--;
        if (
$_GET['inviapag']=='avanti'$_SESSION['pagina']++;
        if (
$_GET['inviapag']=='prima'$_SESSION['pagina']=1;
        if (
$_GET['inviapag']=='ultima'$_SESSION['pagina']=$num_pagine;
        echo 
"
 ses[pag]:"
.$_SESSION['pagina']."
"
;
        }
    else {
        
        
$_SESSION['pagina']=$_GET['inviapag'];
        
        }
     }
...