Click here to Skip to main content
Click here to Skip to main content

How to prevent Re-Post action caused by pressing browser's Refresh button

By , 5 Feb 2012
 

The Problem

When a user presses the Browser's Refresh button (Or F5/Ctrl+R etc.) the browser resends the last request data to the server.
This action causes an Unexpected Re-Post action (if there was one).
In some cases, it can be very problematic (For example, in shopping website when the user clicks on "Add to Cart" button and then presses the Refresh button - the item will be added twice !!!)
 

The solution

We will store a unique code (in my case Guid) on both client and server and compare them on every request action. If the two codes are not equal, the action will be canceled and the page will reload ('GET' method).
 
Add Web User Control with this code:

Markup

Add a hidden field to hold client code
<asp:HiddenField runat="server" ID="_repostcheckcode" />

Code behind

    protected void Page_Load(object sender, EventArgs e)
    {
        CancelUnexpectedRePost();
    }
 
    private void CancelUnexpectedRePost()
    {
        string clientCode = _repostcheckcode.Value;
 
        //Get Server Code from session (Or Empty if null)
        string serverCode = Session["_repostcheckcode"] as string  ?? "";
 
        if (!IsPostBack || clientCode.Equals(serverCode))
        {
            //Codes are equals - The action was initiated by the user
            //Save new code (Can use simple counter instead Guid)
            string code = Guid.NewGuid().ToString();  
            _repostcheckcode.Value = code;
            Session["_repostcheckcode"] = code;
        }
        else
        {
            //Unexpected action - caused by F5 (Refresh) button
            Response.Redirect(Request.Url.AbsoluteUri);
        }
    }
 
Now you can drag the User Control to every page you want to handle that problem, or you can drag it to your Master Page to handle the problem in the entire site.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

About the Author

Udi Perets
Team Leader
Israel Israel
Member
No Biography provided

Sign Up to vote   Poor Excellent
Add a reason or comment to your vote: x
Votes of 3 or less require a comment

Comments and Discussions

 
Hint: For improved responsiveness ensure Javascript is enabled and choose 'Normal' from the Layout dropdown and hit 'Update'.
You must Sign In to use this message board.
Search this forum  
    Spacing  Noise  Layout  Per page   
GeneralMy vote of 5memberniubay5 Sep '12 - 22:29 
GeneralMy vote of 4memberSurangiT27 Aug '12 - 19:59 
QuestionURL REDIRECTIONmemberMember 91711282 Aug '12 - 1:10 
Questionprevent Re-Post action by pressing browser's RefreshmemberMichael Chiew27 Jul '12 - 19:03 
QuestionSuggestionmemberJens Meyer12 Mar '12 - 6:21 
GeneralReason for my vote of 5 i realy needed this one , greate pos...memberuri bahbut8 Feb '12 - 1:58 
GeneralReason for my vote of 5 i realy need that , very good one !!...memberuri bahbut8 Feb '12 - 1:55 
GeneralReason for my vote of 2 what happens when a user has more th...memberenoreth5 Feb '12 - 4:28 
GeneralReason for my vote of 5 Good tipmemberadribusc1 Feb '12 - 0:17 
GeneralReason for my vote of 5 Nice TipmemberThatsAlok31 Jan '12 - 21:05 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Permalink | Advertise | Privacy | Mobile
Web02 | 2.6.130523.1 | Last Updated 5 Feb 2012
Article Copyright 2012 by Udi Perets
Everything else Copyright © CodeProject, 1999-2013
Terms of Use
Layout: fixed | fluid