将$ _GET变量转换为$ _POST并重定向页面

I'm sending info through a link read in an email via $_GET (i.e. link in email is in form http://website.com?dogs=cats"). But I want the site URL to not have the appendages visible. So I've tried:

  • Linking to a page which saves the $_GET in a hidden form fields, then automatically submits the form; problem is that the back button then leads back to this intermediary page
  • Same as above, opening intermediary page in new tab, then having the form load another new tab (_blank), and closes itself; works fine, except in IE these are windows, which are annoying

I'm considering saving the $_GET results in a cookie, then redirecting the page with a header(), then extracting data and expiring the cookie.

Is there an easier way that I'm overlooking?

How about starting a session and storing them to the $_SESSION variables?

Here is a sample implementation of how you can make a hidden arguments on links. This sets a custom handler on the links which will copy hidden argument into the form and send it through post request. It is not a substitute to the session, but it can have it's own uses.

<form id="form" method="post" action="">
   <input id="dogs" type=hidden name="dogs">
</form>

<a href="otherpage.php" data-dogs="cats">Sample link</a>

<script>
    $(function(){
        $('a').click(function(ev){
            ev.preventDefault();
            $('#dogs').val($(this).attr('data-dogs'));
            $('#form').attr('action',$(this).attr('href')).submit();
        }
    });
</script>