Il existe une autre raison, plus insidieuse, pour laquelle cela peut se produire même lorsque l'objet Session a été initialisé, comme le montre Cladudio.
Dans le Web.config, s'il y a un fichier <httpCookies>
qui a pour valeur requireSSL="true"
mais vous n'utilisez pas réellement HTTPS : pour une requête spécifique, alors le cookie de session n'est pas envoyé (ou peut-être pas renvoyé, je ne suis pas sûr) ce qui signifie que vous vous retrouvez avec une toute nouvelle session pour chaque requête.
Je l'ai découvert à la dure, en passant plusieurs heures à faire des allers-retours entre plusieurs commits dans mon contrôle de source, jusqu'à ce que je trouve quel changement spécifique avait cassé mon application.