Work in progress!
The Back button issues are caused mainly by splitting state between client and server. If application allows to cache views, then when a user goes back in browser resource history, he sees a stale page. The state of this page does not correspond to state of the server anymore.
These are the choices to fight this problem:
- Prohibit navigation with standard browser buttons;
- Synchronize server to browser;
- Synchronize browser to server;
- Throw error and start with well-known "clean" point.
If server state has not been committed yet, it is possible to synchronize server to browser. This technique is used in now popular continuations approach. On the other hand, if server state has been committed, like after paying for the goods bought online, it is not possible to rollback server anymore and continuations technique falls flat.
On the other hand, synchronizing view with server is always possible.
Hall Of Shame
Web applications that do not support browser navigation properly, try to restrict users from using standard browser buttons. You do not want to build an application that does something like this:
See also: BrowserBackAndSecurity