Все упомянутые вами методы в порядке. На вашем месте я бы подумал об использовании сессий, потому что это более естественно для меня.
Disclaimer: сессия имеет некоторые ограничения, когда вы хотите создать приложение, готовое к большой нагрузке. Для сложных сценариев развертывания может быть хорошим вариантом избежать сеансов.