You have the Post and the Get data.
The redirect is done using the Get, which means the ways to send data are:
- URL parameters only.
- Using a temporary place to store the data, like the session, or database, and pass the id of those data/message on URL parameters.
So if you have only two message to show, is just a simple http://example.com?msg=1
but if you would like to show more information you do not have much choice here - but:
In the action "Post/Redirect/Get" on the first Post you can make a decision - if the user has sent all the data correctly, and if all is OK then you do the redirect, and with this redirect you "only" say to the user, here is the data you entered, takes it from the DB and all is OK. If the Data is NOT correct, you do NOT make redirect, stay on page and show all the error messages about the data.

(source: planethost.gr)
So to summarize, you do the redirect only when the user has successfully entered the data and all is OK, and after the redirect you have only one message to show "that is OK" and here is the data.
Related:
Post-Redirect-Get with ASP.NET
Cookies
Absolutely forget about saving messages in cookies, they are not made for this purpose, they are limited in size, the cookie data is carried on all calls (even on the images) and the browser can even crash/or behave strangely with big size cookies.