En fait, tout ça, c'est parce que protocole HTTP – utilisé par les navigateurs pour communiquer avec les serveurs Web – est sans sessions, ce qui veut dire qu'il n'y a pas un lien durable qui s'établit entre ta machine et celle avec qui tu communiques.
En très gros, le principe d'une session, c'est que les deux machines qui parlent entre elles savent qui elles ont en face, il y a un pont qui s'établit entre elles. Le serveur connaît donc ta machine particulière, et peut par exemple décider de lui envoyer spontanément des infos (par exemple, dans une messagerie instantanée, type Jabber, Skype ou MSN, quand le serveur reçoit un message, il se dit « ah, tiens, ça c'est pour lui », et il te l'envoie directement).
Les sessions sont donc un truc un peu compliqué à gérer, qu'on ne met en place que pour les communications qui en ont besoin. Or, historiquement, sur le HTTP, il n'y avait pas besoin de sessions : normalement, tout ce que fait ton navigateur, c'est aller voir le serveur Web, lui dire « je veux cette page-là », et repartir avec, sans que le serveur ait vraiment besoin de savoir qui tu es pour te renvoyer des trucs. Quand on a commencé à faire des sites Web, il n'y avait pas trop besoin de s'authentifier : ceux qui demandent telles pages reçoivent telle page, point ; c'était le même contenu pour tout le monde.
Les problèmes ont commencé quand on a voulu commencer à mettre en place des sites Web un peu plus intelligents, qui sont par exemple capables d'envoyer, pour la même adresse donnée (par exemple, «
http://forum.ubuntu-fr.org/profile.php?id=925831 »), des pages différentes en fonction de la personne qui se connecte (le lien que j'ai donné ci-dessus est celui de ton profil : toi, le forum doit te permettre de modifier des choses dessus ; moi, il doit seulement me permettre de voir, sans rien modifier).
Un tel fonctionnement, ça nécessite que l'utilisateur s'authentifie, et reste authentifié sur plusieurs pages (sinon, il faudrait manuellement entrer son nom d'utilisateur et son mot de passe chaque fois que tu veux voir une page, ce qui serait lourd et pas sécurisé). Or, ce n'est techniquement pas possible « directement », puisque le protocole utilisé ne gère pas lui-même les sessions, mais réagit seulement quand on vient lui parler. À chaque fois que tu demandes à charger une page, il a oublié que tu étais venu le voir cinq minutes avant.
Du coup, la solution qu'on a trouvé, c'est de faire en sorte que tu te ré-authentifies à chaque fois, mais d'une manière un peu plus sûre : chaque fois que ton navigateur va s'adresser au serveur Web pour lui demander une page, il lui dit « je veux telle page, et tiens, moi je suis telle personne ». C'est à ça que servent les cookies : ce sont des petits bouts d'information que ton navigateur donne au serveur Web à chaque fois qu'il va lui parler, et qui servent à t'authentifier.
Quand tu vas sur le forum, donc, tu dois entrer ton login/mot de passe la première fois, pour que le serveur te reconnaisse, et ensuite ton navigateur doit garder un cookie pour re-dire au serveur, à chaque fois « je suis parakalo ». Sans le cookie, le serveur saurait qui tu es au moment où tu lui envoies ton login/mot de passe, mais aurait déjà oublié au moment où tu irais chercher la page suivante.