Les cookies, les sessions (je parle ici des sessions serveur, pas du sessionStorage d'HTML5) et les bases de données n'ont pas DU TOUT la même utilité.
Les bases de données servent à stocker des informations structurées de façon persistante. Donc effectivement stocker les informations d'un utilisateur en BDD à son inscription pour pouvoir y accéder plus tard est la solution.
Les cookies servent à stocker de petites informations sur la machine du client (typiquement sur un formulaire de connexion le résultat de la checkbox "Rester connecter" ou "Se souvenir de moi" peut être géré avec les sessions). Les cookies étant gérés côté client, ils peuvent être modifiés ou supprimés par celui-ci, il ne faut donc pas y stocker d'informations sensibles : pas de mot de passe notamment. Uniquement des informations d'aide à la navigation. Ils ne sont pas "has been", ils ont simplement une utilité différente.
Les sessions sont elles gérées côté serveur, elles sont donc bel et bien sécurisées et en AUCUN CAS modifiables par le client, seul le serveur y a accès. Comme leur nom l'indique, elles servent à stocker des informations qui doivent être conservées pendant la session de connexion d'un utilisateur : son identifiant utilisateur par exemple pour assurer la connexion (on le stocke en session plutôt qu'en cookie car l'utilisateur n'a pas à le connaitre, et surtout pas à le modifier, sinon il pourrait se faire passer pour un autre utilisateur). Leur contenu est supprimé quand un utilisateur se déconnecte (càd soit une destruction manuelle de la session en cliquant sur le bouton "Déconnexion", soit après un certain temps sans utilisation (de base pour PHP c'est une vingtaine de minutes)).
Pour la durée de la connexion de l'utilisateur, en général on ne stocke pas son mot de passe en session, son id suffit. Si la session a été crée c'est de toute façon qu'il a réussi à se connecter en mettant le bon mot de passe donc pas besoin de vérifier ce dernier à chaque action.