Хм, вы же сами все варианты перечислили. Другое пока не изобретено. Просто напишите плюсы и минусы в реализации для каждого, и выберите лучшее.
По мне, так ссылка должна выполнять GET-запрос, соответственно все данные в URL. Редиректить, чтобы скрыть что-то — ерунда какая-то.
Кнопка может выполнять пост-запрос.
Если очень-очень надо ссылку заставить делать POST-запрос, используйте javascript.
И GET и POST прозрачны для мониторинга. Чтобы параметрами в них не злоупотребляли используйте валидацию на серверной стороне. Отсекайте невалидные запросы.
Если надо хранить состояние между страницами, так, чтобы пользователь даже не знал, что вы там для него храните — используйте сессии, передавая в куки только идентификатор сессии, а не сами хранимые значения.