Ik ben bezig een web-applicatie te ontwikkelen, en daarvoor is het belangrijk dat de gebruiker makkelijk de back-knop kan gebruiken in de browser om zo naar oude pagina's terug te gaan. Echter moeten 'zeer oude' pagina's wel gerefresht worden, en ook als een zelfde pagina opnieuw wordt opgevraagd (bijvoorbeeld een 'overzicht' pagina via een link in een pagina) moet deze niet uit de cache komen.
Om te zorgen dat dit netjes werkt heb ik de volgende dingen gedaan:
- via http-headers heb ik de caching tijd op 10 minuten gezet. Dit zorgt dat zeer oude pagina's niet meer zichtbaar zijn.
- er is een 'update' counter die bij iedere request opgehoogd wordt, en in een cookie wordt opgeslagen. Deze waarde wordt ook als een soort dummy get-variable in links gezet. Dit zorgt dat als iemand de zelfde (overzicht) pagina opnieuw opvraagt door op een link te klikken, deze toch opnieuw gegenereerd wordt en niet uit de cache komt.
Dit werkt allemaal naar tevredenheid, maar ik wil meer
Ik heb nu een pagina die op basis van een POST request allerlei processing doet (database updates, en meer) en dan als deze processing OK is, de gebruiker door moet sturen naar een overzichtspagina. Als de processing niet OK is, moet deze redirect niet worden uitgevoerd.
Op de betreffende pagina print ik nu eerst regelmatig output (met flush()) om de gebruiker te laten zien wat er gebeurt (de processing kan tot een minuut duren, en het is dus nodig om de gebruiker af en toe te laten weten dat er nog wat gebeurt). Daarna blijkt pas of het proces geslaagd is, en kan ik dus niet meer bij de http-headers.
De redirect doe ik nu door op het moment dat de processing succesvol is afgerond, een <SCRIPT> te printen die de document.location verzet.
De redirect gaat dan prima, maar het probleem zit hem er in dat de back-knop dezelfde pagina laadt (uit de cache) waar inmiddels die <SCRIPT> tag in staat en meteen weer naar de overzichtspagina gaat.
Wat ik zou willen, is 'iets' om de redirect dus eenmalig uit te voeren, en niet meer als de gebruiker de back-knop gebruikt heeft.
Eerst dacht ik simpel een variable op '1' te kunnen zetten en die te controleren, maar dingen als javascript variablen worden bij het back gaan gereset dus dat werkt niet, en dingen die ik in een cookie/sessie opsla worden niet bekeken omdat de pagina uit de cache komt.
Ik vraag me dus af of er nog een manier is om mijn doel te bereiken...
Ik design dit overigens hoofdzakelijk voor IE, maar vindt het wel prettig om het zoveel mogelijk browser-onafhankelijk te houden zodat de browser keuze in principe vrij is en blijft.
Om te zorgen dat dit netjes werkt heb ik de volgende dingen gedaan:
- via http-headers heb ik de caching tijd op 10 minuten gezet. Dit zorgt dat zeer oude pagina's niet meer zichtbaar zijn.
- er is een 'update' counter die bij iedere request opgehoogd wordt, en in een cookie wordt opgeslagen. Deze waarde wordt ook als een soort dummy get-variable in links gezet. Dit zorgt dat als iemand de zelfde (overzicht) pagina opnieuw opvraagt door op een link te klikken, deze toch opnieuw gegenereerd wordt en niet uit de cache komt.
Dit werkt allemaal naar tevredenheid, maar ik wil meer
Ik heb nu een pagina die op basis van een POST request allerlei processing doet (database updates, en meer) en dan als deze processing OK is, de gebruiker door moet sturen naar een overzichtspagina. Als de processing niet OK is, moet deze redirect niet worden uitgevoerd.
Op de betreffende pagina print ik nu eerst regelmatig output (met flush()) om de gebruiker te laten zien wat er gebeurt (de processing kan tot een minuut duren, en het is dus nodig om de gebruiker af en toe te laten weten dat er nog wat gebeurt). Daarna blijkt pas of het proces geslaagd is, en kan ik dus niet meer bij de http-headers.
De redirect doe ik nu door op het moment dat de processing succesvol is afgerond, een <SCRIPT> te printen die de document.location verzet.
De redirect gaat dan prima, maar het probleem zit hem er in dat de back-knop dezelfde pagina laadt (uit de cache) waar inmiddels die <SCRIPT> tag in staat en meteen weer naar de overzichtspagina gaat.
Wat ik zou willen, is 'iets' om de redirect dus eenmalig uit te voeren, en niet meer als de gebruiker de back-knop gebruikt heeft.
Eerst dacht ik simpel een variable op '1' te kunnen zetten en die te controleren, maar dingen als javascript variablen worden bij het back gaan gereset dus dat werkt niet, en dingen die ik in een cookie/sessie opsla worden niet bekeken omdat de pagina uit de cache komt.
Ik vraag me dus af of er nog een manier is om mijn doel te bereiken...
Ik design dit overigens hoofdzakelijk voor IE, maar vindt het wel prettig om het zoveel mogelijk browser-onafhankelijk te houden zodat de browser keuze in principe vrij is en blijft.