Пользователь всегда может изменять куки, потому что это хранилище на стороне клиента .Вам необходимо хранить данные на стороне сервера .
Состояние сеанса ASP.NET является приемлемым решением для вашей проблемы, хотя есть некоторые предостережения относительно ферм серверов.В этой статье MSDN объясняется, как заставить Session State работать в среде вашей фермы серверов.Ответ Be.St. касается предлагаемого внепроцессного подхода.
Третий вариант - создать хранилище сеансов, управляемое базой данных, которое не обязательно зависит от состояния сеанса.Я нахожу Session State немного хлопотным с различными средами развертывания (например, фермами серверов), поэтому иногда я буду использовать этот подход.Затем вы можете получить доступ к этим данным, прикрепив ключ сеанса к строке запроса или сохранив ключ сеанса в файле cookie (все еще потенциально изменяемый пользователем, но с меньшей вероятностью являющийся целью для такого действия).