Pagina herladen als ik op terug knop in browser druk

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Guido  -

Guido -

24/09/2023 18:07:22
Quote Anchor link
Hoi,

Als ik mijn contactformulier invul en verstuur wordt ik doorgestuurd naar een bedankpagina.

Echter, als ik op de terug knop in mijn browser druk komt het ingevulde formulier weer te voorschijn. Dat wil ik niet.

Dus heb ik onderstaande snippet gevonden en toegevoegd. Dit zorgt ervoor dat de vorige pagina herladen wordt als ik op de terug knop druk. Waardoor formulier dus leeg getoond wordt.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
if (window.performance.getEntriesByType('navigation')[0].type === "back_forward") {location.reload();}


Ik heb weinig verstand van JS, mijn vraag is of dit correct is en geen deprecated onderdelen bevat?
Ik las dat "navigation" deprecated is, maar ik weet niet of dit over het element uit mijn code gaat:
https://developer.mozilla.org/en-US/docs/Web/API/Performance

Guido
 
PHP hulp

PHP hulp

21/12/2024 17:46:33
 
- Ariën  -
Beheerder

- Ariën -

24/09/2023 19:37:16
Quote Anchor link
Los het serverside op. Clientside kan je alles omzeilen.

https://en.wikipedia.org/wiki/Post/Redirect/Get
 
Adoptive Solution

Adoptive Solution

24/09/2023 20:00:48
Quote Anchor link
Ik gebruik deze code.

De middelste if heb ik zelf toegevoegd. Als je die gebruikt keer je terug naar de form pagina waar je vandaan kwam.

Als je de 2 regels comment // blijf je op dezelfde pagina.

Het werkt niet met bestanden uploaden. Daarvoor moet je eerst $_FILES verwerken voordat je onderstaande code uitvoert.

https://stackoverflow.com/questions/13889198/php-avoid-browser-reposting-post-on-page-refresh/13889283#13889283

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?php
session_start();

if( strcasecmp( $_SERVER['REQUEST_METHOD'],"POST" ) === 0 )
{

    $_SESSION['postdata'] = $_POST;
    header("Location: ".$_SERVER['PHP_SELF']."?".$_SERVER['QUERY_STRING']);
    exit();
}


if ( !$_SESSION['postdata'] )
{

    header("Location: ./");
    exit();
}


if( isset( $_SESSION['postdata'] ) )
{

    $_POST = $_SESSION['postdata'];
    unset($_SESSION['postdata']);

}

?>

<!DOCTYPE html>
Gewijzigd op 24/09/2023 20:01:44 door Adoptive Solution
 
Guido  -

Guido -

24/09/2023 20:19:50
Quote Anchor link
@arien - dat zal betekenen dat ik mijn hele plugin moet ombouwen, omdat die gebruikt maakt van $_post methode.

@Adoptive Solution - Bedankt, maar het betreft een plugin van WordPress en het gebruik van PHP sessies wordt sterk ontmoedigd (WordPress heeft een zogenaamnde transients API voor tijdelijke opslag van data).

Ik heb nog geen oordeel gekregen over mijn JS fix?

Guido
 
- Ariën  -
Beheerder

- Ariën -

24/09/2023 21:10:05
Quote Anchor link
Jawel hoor. Ik ben er kort en bondig in.

- Ariën - op 24/09/2023 19:37:16:
Los het serverside op. Clientside kan je alles omzeilen.
 
Guido  -

Guido -

24/09/2023 21:20:44
Quote Anchor link
Dit werkt ook, lijkt een betere browser support te hebben:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
if (window.performance.getEntriesByType('navigation')[0].type === "back_forward") {window.location.href=window.location.href;}


Toevoeging op 24/09/2023 23:27:45:

Quote:
Los het serverside op. Clientside kan je alles omzeilen.


Deze methode gebruik ik al voor doorsturen na succesvol verzenden. Dus verversen vd pagina is ondervangen, alleen mijn vraag ging over terug naar vorige pagina.

Guido
Gewijzigd op 24/09/2023 23:28:35 door Guido -
 
Guido  -

Guido -

26/09/2023 07:49:15
Quote Anchor link
Hoi,

Ik maak dus al gebruik van Post/Redirect/Get en dat werkt prima. Ik zie dat mijn $_post global leeg is na verzenden van formulier.

De reden waarom formulier ingevuld is als ik op de terug knop druk komt doordat de waardes in geheugen van de browser blijven staan.. Is dat op een eenvoudige manier op te lossen? Ik kan autocomplete="off" toevoegen aan mijn formulier maar dat werkt niet optimaal in alle browsers merk ik.

Aanvulling: ik ben er achter dat dit met headers / de back/forward cache te maken heeft.

Guido
Gewijzigd op 26/09/2023 21:56:24 door Guido -
 
Guido  -

Guido -

21/02/2024 16:30:40
Quote Anchor link
Quote:
Aanvulling: ik ben er achter dat dit met headers / de back/forward cache te maken heeft.


Als ik formulier verstuur, word ik doorgestuurd naar een bedankpagina. Echter, als ik dan op de terug knop in mijn browser druk verschijnt de vorige pagina weer in beeld met daarop het ingevulde(!) formulier. Dat voorkom ik met onderstaande code (bron (oa) Stack Overflow). De pagina wordt herladen, met als gevolg dat formulier leeg gemaakt wordt.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
if (document.addEventListener) {
    window.addEventListener('pageshow', function (event) {
        if (event.persisted || performance.getEntriesByType("navigation")[0].type === 'back_forward') {
            location.reload();
        }
    },
    false);
}


Opmerkingen / verbeteringen zijn welkom.

Guido
Gewijzigd op 21/02/2024 16:39:11 door Guido -
 
Adoptive Solution

Adoptive Solution

21/02/2024 18:01:26
Quote Anchor link
Antwoord indertijd gegeven.

Zet de code op je bedankpagin.



Toevoeging op 21/02/2024 18:01:42:

Antwoord indertijd gegeven.

Zet de code op je bedankpagina.

https://www.phphulp.nl/php/forum/topic/pagina-herladen-als-ik-op-terug-knop-in-browser-druk/104784/1/#760344

Toevoeging op 21/02/2024 18:02:41:

Antwoord indertijd gegeven.

Zet de code op je bedankpagina.

https://www.phphulp.nl/php/forum/topic/pagina-herladen-als-ik-op-terug-knop-in-browser-druk/104784/1/#760344

Toevoeging op 21/02/2024 18:03:15:

Drie keer is scheepsrecht. Forum heeft hetzelfde euvel.
 
Guido  -

Guido -

21/02/2024 20:10:01
Quote Anchor link
Hoi,

En zie mijn toenmalige reactie, gebruik van PHP sessie wordt afgeraden binnen het betreffende CMS (WordPress).

Wat is er mis met de js benadering?

Guido
Gewijzigd op 21/02/2024 20:10:33 door Guido -
 
- Ariën  -
Beheerder

- Ariën -

21/02/2024 21:17:46
Quote Anchor link
Guido - op 21/02/2024 20:10:01:

En zie mijn toenmalige reactie, gebruik van PHP sessie wordt afgeraden binnen het betreffende CMS (WordPress).

Waar heb je dat gevonden? Ik ben benieuwd hoe dat bekrachtigd wordt en wat de argumenten zijn, want ik zie diverse tutorials over Wordpress plug-ins die gewoon PHP sessies gebruiken.
Gewijzigd op 21/02/2024 21:18:03 door - Ariën -
 
Guido  -

Guido -

21/02/2024 23:14:57
Quote Anchor link
Kan zo snel niets officieels vinden. WP heeft nog nooit PHP-sessies gebruikt, enkel een client side cookie voor als je ingelogd bent.
Maar dat het zeker ontmoedigd wordt blijkt uit de foutmelding die in het dashboard vd site getoond wordt, zoek maar eens op "wp site health php session". Dus ik probeer dan ook iets te vinden dat hieraan voldoet.

Guido
 
- Ariën  -
Beheerder

- Ariën -

21/02/2024 23:49:53
Quote Anchor link
Omdat Wordpress geen PHP Sessions gebruikt, moet je het ook niet gebruiken in een plugin?
Aparte redenatie.

Ik vraag mij bovendien af of je die thread wel gelezen hebt over een bug.
https://wordpress.org/support/topic/an-active-php-session-was-detected-by-the-plugin-site-health/

Ik zie nergens een claim dat PHP Sessions niet in Wordpress plugins horen.
Kan je dat bekrachtigen?

Verder zie ik meerdere plug-ins met PHP sessies. Het komt er denk ik op neer 'dat je de klok heb horen luiden, maar weet niet waar de klepel hangt'.
Gewijzigd op 21/02/2024 23:58:53 door - Ariën -
 
Guido  -

Guido -

22/02/2024 00:08:02
Quote Anchor link
Bedoel je dat het ws op te lossen is met gebruik van:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
session_write_close();
 
- Ariën  -
Beheerder

- Ariën -

22/02/2024 00:15:41
Quote Anchor link
Ja, mogelijk wel.
Daarnaast is het topic ook al enkele jaren oud.
Dus de vraag is: heb je praktische problemen met het gebruik van sessies?
Gewijzigd op 22/02/2024 00:16:31 door - Ariën -
 
Guido  -

Guido -

02/03/2024 23:51:51
Quote Anchor link
Quote:
Ik zie nergens een claim dat PHP Sessions niet in Wordpress plugins horen.


Je hebt gelijk, is wel toegestaan.
Maar als meerdere WordPress plugins native sessies gebruiken kan dit bij verkeerd gecodeerde plugins onderlinge conflicten veroorzaken. Daarom wordt op fora gewaarschuwd hiervoor en wordt gewezen op alternatieven binnen WordPress zelf, zoals Transients.
 
- Ariën  -
Beheerder

- Ariën -

03/03/2024 00:01:43
Quote Anchor link
Gewoon unieke sessies gebruiken, desnoods met een prefix van je add-on.
Was leuker geweest als er namespaces voor bestonden.
Gewijzigd op 03/03/2024 00:02:45 door - Ariën -
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.