Voordat je een nieuw bericht opent zou je misschien ook nog even willen reageren op je vorige topic of reageren met de boodschap dat je daar nog eens een nachtje (of twee) over slaapt?
ontopic: definieer "het werkt niet".
Daarnaast is dit:
<?php
if (!isset($_SESSION)) {
session_start();
}
?>
equivalent met:
<?php
if (true) {
session_start();
}
?>
Als je nergens anders/eerder de sessie start (EDIT: kan iemand dit bevestigen/weerleggen? niet getest). De else zal dus nooit uitgevoerd worden.
Wellicht wil je controleren of de sessie leeg is en in dat geval redirecten? Of nog beter: controleer op datgene wat in de sessie zou moeten zitten, en redirect anders. En start altijd meteen je sessie met session_start().
Wellicht wil je controleren of de sessie leeg is en in dat geval redirecten? Of nog beter: controleer op datgene wat in de sessie zou moeten zitten, en redirect anders. En start altijd meteen je sessie met session_start().
<?php
session_start();
//Als een user inlogt maak je b.v. het volgende:
$_SESSION['user_id_ingelogd'] = 1; //Het id van de zojuist ingelogde user
?>
Als dan bovenstaande sessie waarde gevuld is, toon je de gewenste pagina's. Anders toon je enkel de login.
Wat mijn vorig bericht betreft, heb je gelijk in :D
Ik ging idd over nadenken met wat ik precies bedoeld en zal daar later een reactie plaatsen :D
OT:
Wat bedoel met dat het niet werkt, is dat ik gewoon op index.php kom ipv dat ik geredirect wordt naar inlog pagina wanneer ik niet ingelogd ben.
Momenteel gebruik ik onderstaande code voor header.php
En voorheen werkte wel het eerste gedeelte met session, maar redirect code was niet aanwezig.
Verder vraag ik me af of het de juiste plek is om een session code in het header.php te plaatsen? Ik dacht nl dat zo moest, zodat het voor elk pagina geldt, toch?
[size=xsmall]Toevoeging op 17/08/2017 21:51:30:[/size]
Update 1:
Op de header.php pagina heb ik de session code aangepast naar onderstaande code.
En de redirect werkt nu wel, maar nadat ik ingelogd ben op login.php dan gaat hij niet naar index.php
Maar via foutmelding-afhandeling krijg ik nu de foutmelding :
An error occurred in script '/includes/header.php' on line 7: A session had already been started - ignoring session_start()
Date/Time: 8-17-2017 22:48:21
Mijn concrete vragen zijn dus:
1. moet ik een sessie starten bovenaan de header.php zodat het voor elk pagina start?
2. Is het een vereiste dat ik nog een keer een sessie moet starten op elk ander pagina?
Dus de structuur zou als volgt eruit zien:
1. sessie starten
2.include header
3.content
4.include footer
[quote="Thomas van den Heuvel op 16/08/2017 22:55:30"]
Wellicht wil je controleren of de sessie leeg is en in dat geval redirecten? Of nog beter: controleer op datgene wat in de sessie zou moeten zitten, en redirect anders. En start altijd meteen je sessie met session_start().
<?php
session_start();
//Als een user inlogt maak je b.v. het volgende:
$_SESSION['user_id_ingelogd'] = 1; //Het id van de zojuist ingelogde user
?>
Als dan bovenstaande sessie waarde gevuld is, toon je de gewenste pagina's. Anders toon je enkel de login.
[/quote]
Heb je de reactie hierboven goed gelezen?
Include altijd header.php
in header.php zet je bovenaan je script gewoon als allereerste na de php opening
<?php
session_start();
?>
Ik heb de reacties hierboven wel goed gelezen, maar de volgorde stond niet goed en daarom werkt werkt het deels en dus niet helemaal.
En na het goed zetten van de volgorde is het probleem helemaal opgelost ;-)
In de header.php pagina heb ik nu bovenaan staan:
if(!isset($_SESSION))
{
session_start();
}
En op elke nieuw pagina heb ik de structuur als volgt:
require ('includes/config.inc.php');
include("includes/header.php");
if (!isset($_SESSION['user_id'])) {
header("Location: login.php");
exit(); // Quit the script.
}
session_start(); staat nog steeds niet helemaal bovenaan in je PHP-code.
Het kan echt geen kwaad om dat te doen.
Nu maak je een -naar mijn idee- onnodige voorwaarde aan om te kijken of de sessie-container bestaat. Ik heb geen idee met welk doeleinde.
Zorg er overigens wel voor dat je bij na een inlog een nieuwe sessieID aanmaakt met session_regenerate_id(). Dit voorkomt dat mensen vooraf je sessie kunnen kapen om zich als jouw voor te doen. Zodra die functie wordt uitgevoerd wordt die oude ID namelijk vernietigd, zodat de kopie ervan (die de hacker kan hebben) niet meer werkt.
Bovenaan de sessie staat de foutafhandeling...
Die voorwaarde om te controleren of er reeds een sessie bestaat, is om te voorkomen dat ik continue mails krijg m.b.t. session ingnore. Voorheen had ik hier erg last van, maar nadat ik controleer of er een sessie bestaat, behoren de mails m.b.t. session ignore tot het verleden :-)
Bedankt voor de tip om session_regenerate_id() te gebruiken ;-)
Voordat ik het ging gebruiken, heb ik even opgezocht en kwam onderstaande link tegen:
En het implementeren is erg eenvoudig.
Link: http://www.phptutorial.info/?session-regenerate-id