You can't block browser behaviour such as "back" or "reload". You could send the post request in a new window, which prevents "back", but reload for the new window remains.
So, in my opinion this becomes an application specific question. What double posting are you trying to prevent, and why?
If the result of the post is that I buy some products for you, simply keeping user_id and an array of order_ids in $SESSION would let you retrieve the products bought during this session and compare them to the new order. If they new order is identical to one of the others, warn the user and let them decide what to do.
Another way would be to keep a random token in $SESSION and also send this value along to the form. On post, you change the session token (which is then used for the next form the user fills out). If the user goes back/reloads, the form token and session token won't match and you disallow the post. But, for other scenarios this may not be enough: e.g. to prevent spamming (since the user could keep resending the same posts except for the token which they update to the new value).
If we're talking about forum posts, you could similarily allow only one post per N minutes in the same thread. You could prevent any post being "too similar" to any other by this user in the last M minutes, where too similar could mean identical.
In a more general manner, you could precreate a DB entry for this user, send its id along, and thereafter you update only if the other fields are default/null values. To prevent the user from precreating several db entries (by reloading at this place instead), you'd simply check if such a row allready exists.