Krijg je 'session_start(): Session cannot be started after headers have already been sent' of verlies je na elk formulier je sessie? Start de sessie vóór de eerste uitvoer.
Een PHP-sessie gebruikt een cookie, en een cookie is een HTTP-header. Daarom moet session_start() worden aangeroepen voordat er ook maar één teken naar de browser is gestuurd. Gebeurt dat te laat, dan geeft PHP 8 de waarschuwing Session cannot be started after headers have already been sent (in oudere versies: Cannot send session cookie - headers already sent).
Een verraderlijke variant: het werkt op korte pagina's wel en op lange niet. Met output buffering wordt een stukje uitvoer vastgehouden; is de pagina langer dan die buffer, dan zijn de headers al weg voordat session_start() aan de beurt is. Het verschijnsel: formulieren melden 'sessie verlopen' of een CSRF-fout, maar alleen op bepaalde pagina's.
Menunamen kunnen per versie of toestel iets anders heten. Loop de stappen op volgorde af en stop zodra het werkt.
Roep session_start() aan bovenin het instappunt (of in een bootstrap-bestand dat als eerste wordt geladen), vóór HTML, echo of includes die uitvoer geven.
<?php
if (session_status() !== PHP_SESSION_ACTIVE) {
session_start();
}
// pas hierna HTML of andere uitvoerStaat er in de melding een bestand en regel, dan begon de uitvoer daar. Vaak is het witruimte of een BOM, net als bij headers already sent.
Kijk in de ontwikkelaarstools van de browser (tabblad Netwerk) of het antwoord een Set-Cookie: PHPSESSID=… bevat. Ontbreekt die op de pagina met het formulier, dan werd de sessie te laat gestart.
Kan PHP niet schrijven naar de map in session.save_path (rechten, open_basedir of volle schijf), dan gaan sessies ook verloren. Het foutenlog meldt dat.
Kom je er met deze stappen niet uit, of wil je het liever niet zelf doen? We kijken online mee of komen langs. Hulp op afstand kost €20 per uur; komen we langs, dan is de prijs op aanvraag. Je weet vooraf waar je aan toe bent.
Schrijf kort wat er misgaat en wat je al hebt geprobeerd. Kies of we bellen, online meekijken of langskomen.
Als de sessie halverwege de pagina wordt gestart, hangt het van de lengte van de pagina en de buffergrootte af of het lukt. Start de sessie altijd als eerste.
Op elke pagina die de sessie gebruikt, of één keer in een gedeeld bestand dat bovenaan wordt geladen.
Het verbergt het probleem door alle uitvoer vast te houden. Netter is de sessie eerst te starten.
Hulp nodig van een mens? Website-onderhoud · WordPress-support · Hosting en onderhoud · Alle oplossingen