Cache VS Sessão VS cookies?

O que fazer e o que não fazer com o Cache VS Session VS Cookies?

Por exemplo
Estou usando muito variáveis de sessão e às vezes tenho problemas em um aplicativo de reserva quando os usuários começam a pedir produtos, depois vão almoçar e voltam algumas horas depois e continuam a reserva. Eu armazeno a reserva na sessão até que o usuário confirme ou aborte a reserva, para que não precise falar com o banco de dados e lidar com reservas intermediárias no banco de dados quando os usuários simplesmente clicam no X no navegador e nunca mais voltam.

Em vez disso, devo usar cache, cookies ou alguma combinação para isso?

(Além disso, quando há algum erro no aplicativo, o objeto de sessão é redefinido e eu tenho mais problemas por causa disso)

Na maioria das vezes, faço programação de desktop e sinto que não tenho muito conhecimento aqui, para que qualquer pessoa que possa expandir onde usar cache, sessão, cookies (ou db) seria apreciada

Editarelas respostas, parece que uma combinação de banco de dados e cookies é o que eu quer

Tenho que armazenar a reserva no banco de dados conectado a um ID de sessão Armazene o ID da sessão em um cookie (criptografadoCada página carrega o cookie e busca a reserva no banco de dadosTenho um procedimento de limpeza executado uma vez por semana que limpa as reservas inacabada

Não consigo armazenar a reserva como um cookie, pois o usuário pode alterar preços e outros dados confidenciais e eu tive que validar tudo (não posso confiar nos dados

Eu entendi direito?

E obrigado por ótimas explicações para todos você