php include
Om meer te leren over PHP ben ik begonnen met een beveiligd portal te maken.
Nu zou ik de beste manier willen weten voor het volgende te maken.
Ik heb een index file, waar de basis layout in is ontworpen. Als de persoon niet is ingelogd dan moet uiteraard het login scherm worden weergegeven.
Is de persoon ingelogd dan word je geleid naar de account omgeving.
Deze stappen werken, ik heb gebruik gemaak van een sessie welke op elke pagina word gecontroleerd.
Mijn adres in de adressenbalk is dan bijvoorbeeld https:www.jop.nl/account
Nu wil ik dat het adres zonder subs word aangemaakt, daarmee bedoel ik dat alles zowel het login scherm als account scherm onder https:www.jop.nl/ vallen.
Zelf dacht ik dat dit kon met d.m.v. includes te werken maar zit ik dan op de juiste weg? Of zijn er betere en/of mooiere manieren om dit te creëren in php?
Hoor graag jullie input,.
Gr. Jop
Makkelijk is het niet, omdat er in de URL geen referentie is naar je account-pagina. Hoe moet de browser weten dat die geopend moet worden?
Het zou kunnen met een divje als overlay, die wordt geactiveerd als je op een 'log in' knop drukt. Maar ik vraag mij af of het wenselijk is. Als ik als gebruiker graag direct naar de inlogpagina zou willen, dan mag die keuze best geboden worden.
Je kan ook een 'cloacked frame' gebruiken, maar dat is zwaar verouderde techniek uit de oorsprong van het internet, en wordt keihard afgeraden omdat het meer nadelen en zelfs ergernissen dan voordelen kent.
Gewijzigd op 15/08/2018 23:26:29 door - Ariën -
Omdat ik meer wil weten van php wil ik dit soort dingen nabootsen :).
Nu heb ik Het werkend maar niet op de mooiste manier denk ik.
Wat heb ik gedaan:
Ik heb 1 layout gemaakt welke de index pagina is.
Hier word gekeken of de sessie bestaat en of deze true is.
Is dit niet het geval dan include login.php
Als de gebruiker correct is ingelogd dan refresh de pagina en include account.php
De sessie bestaat dan en is true, en zal daarom altijd de accountpagina tonen met de zelfde link.
Mogelijk dat ze een overlay tonen aan de hand van een sessie die niet zou bestaan, maar dat is een kwestie van wat extra HTML toevoegen onder een bepaalde geprogrammeerde voorwaarde.
Dit riekt allemaal weer naar problemen. Als ik ingelogd ben dan kom ik op de peren pagina en ga ik vervolgens 20 minuten lunchen en ben ik ondertussen uitgelogd dan kom ik met de zelfde url op de appeltjes pagina terecht. Of stel dat ik een link wil doorsturen naar mijn collega die helemaal geen account heeft op de betreffende website.. krijgt hij appeltjes te zien terwijl ik peertjes wilde doorsturen naar hem. Gaat niet werken he. Hou je altijd aan "één URL is één pagina"
Toegegeven, het werkt natuurlijk verwarrend dat je op "dezelfde" pagina "verschillende" dingen ziet, maar als dat duidelijk is, dan lijkt mij dat niet zo'n probleem.
En dan is er nog het organisatorische aspect waarbij je dus functionaliteit van wat in wezen verschillende pagina's zijn op één hoop gooit.
Deze constructie lijkt mij wel -tot op zekere hoogte- toelaatbaar, dat een dashboard pagina op eenzelfde URL zit als iets anders (misschien zelfs wel meer omdat het een portal betreft?), maar ik denk niet dat iemand er wakker van zal liggen als dit twee verschillende adressen zouden zijn.
De technische oplossing is, zoals je zelf al min of meer aangaf, redelijk eenvoudig. Ben je ingelogd, serveer je het dashboard, ben je niet ingelogd of ben je nog aan het inloggen, serveer je je loginfunctionaliteit. Heel kort door de bocht wordt het dus zoiets als:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
<?php
session_start();
// standaard includes, waaronder misschien een "doorlog" zodat je automatisch onder water opnieuw wordt ingelogd ingeval je sessie is verlopen
// ...
if (isset($_SESSION['ingelogd'])) {
// $_SESSION['ingelogd'] is natuurlijk hypothetisch, er zijn andere en wellicht betere manieren
// om je sessie in te delen / te compartimenteren, wat waarschijnlijk ook verstandig is
require_once './dashboard.php';
} else {
require_once './login.php';
}
?>
session_start();
// standaard includes, waaronder misschien een "doorlog" zodat je automatisch onder water opnieuw wordt ingelogd ingeval je sessie is verlopen
// ...
if (isset($_SESSION['ingelogd'])) {
// $_SESSION['ingelogd'] is natuurlijk hypothetisch, er zijn andere en wellicht betere manieren
// om je sessie in te delen / te compartimenteren, wat waarschijnlijk ook verstandig is
require_once './dashboard.php';
} else {
require_once './login.php';
}
?>
Wat je natuurlijk ook zou kunnen doen is een soort van rechtenmanagement ophangen aan de pagina's zelf. Als je onvoldoende rechten hebt, word je geredirect naar de login-/voorpagina. En als je op de loginpagina zit terwijl je al ingelogd was zou je direct doorgestuurd kunnen worden naar /home of /dashboard ofzo.
Een groot deel van hoe je dit organiseert hangt ook af van hoe de navigatie door je applicatie is. Als je bijvoorbeeld gebruik maakt van een single point of entry (index.php) en klasses en een autoloader enzo dan wordt het natuurlijk hele andere koek.
Omdat je een mogelijk complex ding aan het bouwen bent (een portal), loont het