0º Por la forma de plantear el tema, parece una tarea escolar
1º Si tuvieras el reporte de errores activo, verías una advertencia porque estás enviando salida al navegador antes de
session_start();
Para evitar el problema, inicia con esto:
En realidad, es mala práctica enviar HTML antes de saber lo que vas a hacer con la página, pero te solucionará el primer problema
1º B El contador siempre te va a mostrar 1 porque siempre haces la asignación, sin ver si la variable de sesión ya fue creada o no:
Código PHP:
Ver originalif(isset($_SESSION['contador'])) { // Si la variable ya se creó, incrementas su valor
$_SESSION['contador'] ++;
} else {
// Si no se ha creado, la inicializas
$_SESSION['contador'] = 1;
// Suponemos que números tampoco se ha creado
// Y es mejor manejarla en sesión
$_SESSION['numeros'] = array(); }
Creo que con las aclaraciones anteriores ya no deberías tener problemas para resolver el punto
2º