Can you do it without a redirect instead? For example, combine it all into one PHP script - create a function to output the form. Check if nothing was POST'ed and, if not, output the form. If there is data POSTed, do the validation check and display the form again if it fails to validate.
The advantage to this is that inside your function to display the form, you could do something like:
function display_form() {
$user = (isset($_POST['user']) ? htmlentities($_POST['user']) : '');
$name = (isset($_POST['name']) ? htmlentities($_POST['name']) : '');
// etc.
echo <<<my_form
<form method="post">
Name: <input type="text" name="name" value="{$name}"><br>
Username: <input type="text" name="username" value="{$username}"><br>
<!-- etc. -->
</form>
my_form;
}
Note that you have to use a slightly different approach for SELECT elements, checkboxes, radios, etc. In essence, though, you're simply checking if the data exists in the $_POST array and, if so, modifying the HTML as necessary.
Otherwise, if a page redirect is required for some reason or another and you can't change this, then yes, you'll have to store the POST'ed data into a session so that it can be used on a subsequent page load after the form is submitted.