login  Naam:   Wachtwoord: 
Registreer je!
 Forum

beveiliging pagina via sessions (Opgelost)

Offline simonopsomer - 24/02/2007 12:28
Avatar van simonopsomerNieuw lid Ik heb voor mijn site een loginpagina voor het admingedeelte, dat werkt volledig goed en de session wordt ook aangemaakt. Op alle pagina's in het admingedeelte include ik dan voor en na de content een bestand om te kijken of een persoon is ingelogd. Daar zit ook het probleem, normaal kan je bv. bij een if-constructie of een lus vanuit PHP weggaan en overschakelen naar HTML
  1. <?php
  2. if (...)
  3. {
  4. ?>
  5. HTML-code
  6. <?php
  7. }
  8. ?>


En dat zal evengoed werken als dit:
  1. <?php
  2. if (...)
  3. {
  4. echo 'HTML-code';
  5. }
  6. ?>


Het is eigenlijk zoals de eerste manier dat ik wil werken omdat de content in HTML staat.
http://www.plaatscode.be/4366/
Dit is de code waar alle bestanden samen staan, ook de includes (zoals je kan zien in de commentaar). Als ik deze code gebruik, werkt dat goed, maar als ik via includes werk, wordt een parsefout gegeven voor de laatste regel van die include (voor de accolade van de if dus).
En ik wil echt met die includes werken omdat ik nogal veel pagina's heb.

Kan het zijn dat de parser eerst het include-bestand parst? en dan pas include? Want dat zou de foutmelding kunnen verklaren. Als dit niet zo, zou ik ook niet weten hoe dat komt.

23 antwoorden

Gesponsorde links
Offline vinTage - 24/02/2007 12:34
Avatar van vinTage Nieuw lid Wat voor fout krijg je? want ik snap je vraag/probleem maar half.
Offline Voldemort - 24/02/2007 12:37
Avatar van Voldemort PHP ver gevorderde Wat is er nu eigenlijk mis met je script? Je spreekt van "de foutmelding", maar welke foutmelding, ik lees er geen.

Overigens plaats include het bestand gewoon in het andere. Bv.

include_a.php
  1. echo 'a';


include_b.php
  1. include "include_a.php";
  2. echo 'b';


Geeft je dit moest je het voluit schrijven:

  1. echo 'a';
  2. echo 'b';


PHP plaatst de boel in elkaar en parst dan de rest.
Offline simonopsomer - 24/02/2007 12:39 (laatste wijziging 24/02/2007 12:40)
Avatar van simonopsomer Nieuw lid Ja, ik weet dat het een beetje ingewikkeld is,
ik krijg, zoals ik al zei, een gewone parsefout:
Citaat:
Parse error: parse error in ...

Deze krijg ik voor het eerste includebestand, voor de laatste regel ( { ). In de code is dit het eerste deel (maar ik heb het gewoon allemaal even samengevoegd. En dat is net het rare, samengevoegd werkt het wel en apart niet.
Ik denk dat de parser een fout retourneert omdat er geen afsluitende accolade is.

@voldemort,
dat is nu net het vreemde, alle bestanden in één bestand geplaatst, geven geen foutmelding.
Allemaal apart wordt de foutmelding gegeven voor de laatste regel van het eerste includebestand.
Offline vinTage - 24/02/2007 12:42
Avatar van vinTage Nieuw lid
Citaat:
Parse error: parse error in ...

Staat die regel in die code op pastebin?
Anders toon die regel code eens. (+ en - een stuk of 5 regels)
Offline simonopsomer - 24/02/2007 12:45
Avatar van simonopsomer Nieuw lid Het gaat over deze regels
  1. //sessie aanroepen
  2.  
  3. //controleren of sessie klopt
  4. if ( isset($_SESSION['ingelogd']) && $_SESSION['ingelogd'] === true )
  5. {

De laatste is dus waarvoor de parse error gegeven wordt. Dus de laatste regel van het eerste includebestand, maar wat ik nog steeds vreemd vind is dat er geen error komt als alles in één bestand staat.
Offline vinTage - 24/02/2007 12:57
Avatar van vinTage Nieuw lid
  1. <?
  2. if(isset($_SESSION['ingelogd']) && $_SESSION['ingelogd'] === true )
  3. {
  4. include('myOtherPage.php');
  5. ?>
  6.  
  7. html
  8.  
  9. <?
  10. }//afsluiten
  11. else
  12. {
  13. echo 'buzz off';
  14. }
  15. ?>

Daar kan imo weinig fout mee gaan, tenzei je op het geinclude bestand een errortje opbouwt
Offline Threetimes - 24/02/2007 13:47 (laatste wijziging 24/02/2007 13:48)
Avatar van Threetimes PHP beginner probeer
  1. <?
  2. if(!isset($_SESSION['ingelogd']) || $_SESSION['ingelogd'] != true )
  3. {
  4. echo '<h3 class="title">Fout</h3><p class="content">Dit is geen openbare pagina, ';
  5. die 'je moet ingelogd zijn om toegang te hebben tot deze pagina!</p>';
eens als enige bestand (dan hoef je geen 2 losse bestanden te includen, alleen deze)
Offline simonopsomer - 24/02/2007 13:48 (laatste wijziging 24/02/2007 13:51)
Avatar van simonopsomer Nieuw lid @VinTage:
Ah, zo had ik het nog niet bekeken,
ik include nu de bovenste PHP-regels (1-4) en onderaan de pagina de regels 11-16.

Als ik het op jouw manier doe zal het wel werken, maar dat maakt het toch wel zeer ingewikkeld, kan ik dan best de pagina in de URL meegeven?

@Threetimes:
wat is het nut van jouw script? Dat is toch gewoon net zoals mijn code, maar dan veel korter. De code die ik plaatscode.be had gezet werkt ook zoals ik wil, maar het probleem is dat ik meerdere pagina's heb en ik dus de bovenste bestanden normaal include. Wel, als ik ze include werkt dit niet.
Offline vinTage - 24/02/2007 13:57 (laatste wijziging 24/02/2007 13:58)
Avatar van vinTage Nieuw lid Ik snap het geloof ik niet meer, je wilt de code die je op plaatscode hebt staan dat die werkt, maar je krijgt een error ?
Dat komt omdat je bij de allerlaatste echo de ; vergeten bent
Citaat:
echo
'<h3 class="title">Fout</h3>
<p class="content">Dit is geen openbare pagina, je moet ingelogd zijn om toegang te hebben tot deze pagina!</p>';


Als dit de oplossing is, dan heb je ons op een fout spoor gezet met "include"
Offline simonopsomer - 24/02/2007 14:06
Avatar van simonopsomer Nieuw lid Ja, ik probeer het nog even uit te leggen zoals het eigenlijk moet worden met verschillende bestanden. Nu zal je het wel snappen .

Dit is de pagina met de content waarin ik de bestanden include:
http://www.plaatscode.be/4367/

Hier heb je het bestand session_start.php:
http://www.plaatscode.be/4368/

en hier heb je session_end.php:
http://www.plaatscode.be/4369/

Ik had in mijn eerst post alle bestanden gewoon even samengevoegd zodat het iets duidelijk zou zijn (wat dus niet het geval was ).

Maar kort samengevat, als ik alle code, zoals in mijn eerst post samen in één bestand zet, werkt alles perfect, dit wil ik echter niet omdat dit niet praktisch is.
Daarom moet werk ik met includes en verschijnt er deze parsefout:
Citaat:
Parse error: parse error in d:mijn documentenmijn websportfolioincludessession_start.php on line 6

PS: op plaatscode.be was een iets oudere code, die ; had ik al gevonden.
Offline Godlord - 24/02/2007 14:09 (laatste wijziging 24/02/2007 14:14)
Avatar van Godlord PHP gevorderde Je bent de if vergeten af te sluiten -.-'

  1. <?php
  2. //controleren of sessie klopt
  3. if ( isset($_SESSION['ingelogd']) && $_SESSION['ingelogd'] === true )
  4. {
  5. //sessie klopt dus alle gegevens op de pagina weergeven.
  6. }
  7. ?>


Edit: nvm. Waarom doe je zo moeilijk je kan het toch allemaal in een bestand doen en je hebt er geen last meer van. Ik zelf gebruik include als je een stuk in een pagina moet doen bijvoorbeeld als je de pagina opsplitst in 3 delen tot ik bij elk divje include('deel1.php') ofzoiets neerzet en in dat bestand dan de code gooi (of weer verder in deel tot je ook dingen kan in een ander deel zetten) maar een structuur van if { in een bestand en } else { } in een ander heb ik eigenlijk nog nooit gezien. Dat zou ik dus in principe beter in een bestand kunnen gooien. Daarom komt die error waarschijnlijk ook opdagen.
Offline Threetimes - 24/02/2007 14:12
Avatar van Threetimes PHP beginner wel, op regel 49...
Offline vinTage - 24/02/2007 14:12
Avatar van vinTage Nieuw lid
  1. <?php
  2. //controleren of sessie klopt
  3. if ( isset($_SESSION['ingelogd']) && $_SESSION['ingelogd'] === true )
  4. {
  5. //sessie klopt dus alle gegevens op de pagina weergeven.
  6. echo "hallo, ik ben geheim content";
  7. }
  8.  
  9. ?>


wat godlord al zegt dus 
Offline Godlord - 24/02/2007 14:16 (laatste wijziging 24/02/2007 14:19)
Avatar van Godlord PHP gevorderde lees bestand session_end.php hij had het al afgesloten daar maar dat werkt dus niet bij 2 verschillende bestanden. Maarja als ik dus alleen session_start.php had bekeken dan klopte het wel .

Edit: http://www.plaatscode.be/4370/
Offline simonopsomer - 24/02/2007 14:18
Avatar van simonopsomer Nieuw lid Dat is het hem net,
ik wil de HTML als content weergeven als de if geslaagd is daarom ook dit
{
?>
HTML
<?php
}

Snapje, mijn if wordt afgesloten in mijn volgende include.
Het beste zal dan misschien toch zijn gewoon alles in één bestand zet, maar het zijn er wel enorm veel.
Mijn andere site heeft er echter nog meer, en daar heb ik echt geen zin om dat te doen. Is er echt geen oplossing om dat via includes te checken dat iemand ingelogd is?
Offline Godlord - 24/02/2007 14:21
Avatar van Godlord PHP gevorderde als je de PHP source bijwerkt wel ja. Een PHP bestand moet een volledige if else structuur hebben anders werkt het niet.
Dus:
  1. if (blabla == blabla) {
  2. Doe dit
  3. } else {
  4. Doe dit
  5. }

En je kan natuurlijk ook elseif gebruiken.
Offline simonopsomer - 24/02/2007 14:25 (laatste wijziging 24/02/2007 14:26)
Avatar van simonopsomer Nieuw lid Dus met andere woorden zal het nooit op de manier werken zoals ik het wil.
Dan zal ik maar in elk bestand die codes plakken.

Maar weet iemand een manier om dit toch te doen, zonder overal te includen?
Ik bedoel, niet includen zoals ik nu doe, maar wel zo praktisch mogelijk. Zodat er snel aanpassingen kunnen gebeuren.
Offline Godlord - 24/02/2007 14:30
Avatar van Godlord PHP gevorderde
  1. <?php
  2. //controleren of sessie klopt
  3. if ( isset($_SESSION['ingelogd']) && $_SESSION['ingelogd'] === true )
  4. {
  5. //sessie klopt dus alle gegevens op de pagina weergeven.
  6. include('watermoetweergegevenworden.php');
  7. //if van het vorige bestand afsluiten
  8. }
  9. //als de sessie niet klopt
  10. else
  11. {
  12. //wordt een alternatieve tekst weergegeven
  13. '<h3 class="title">Fout</h3>
  14. <p class="content">Dit is geen openbare pagina, je moet ingelogd zijn om toegang te hebben tot deze pagina!</p>'
  15. }
  16. ?>
Offline Threetimes - 24/02/2007 14:30 (laatste wijziging 24/02/2007 14:31)
Avatar van Threetimes PHP beginner
Citaat:
Dat is toch gewoon net zoals mijn code, maar dan veel korter.
Dat is het nou juist!
hetzelfde maardan in 1 bestand i.p.v. 2
  1. <?
  2. if(!isset($_SESSION['ingelogd']) || $_SESSION['ingelogd'] != true )
  3. {
  4. echo '<h3 class="title">Fout</h3><p class="content">Dit is geen openbare pagina, ';
  5. die 'je moet ingelogd zijn om toegang te hebben tot deze pagina!</p>';
  6. }
dan hoef je maar 1 bestand te includen en heb je geen lange if/else structuur in meerdere bestanden nodig
Offline Godlord - 24/02/2007 14:37 (laatste wijziging 24/02/2007 14:42)
Avatar van Godlord PHP gevorderde
Citaat:
dan hoef je maar 1 bestand te includen en heb je geen lange if/else structuur in meerdere bestanden nodig

Wat toch niet werkt .

Voor verschillende includes gebruik je gewoon hetvolgende:
  1. <?php
  2. //controleren of sessie klopt
  3. if ( isset($_SESSION['ingelogd']) && $_SESSION['ingelogd'] === true )
  4. {
  5. //sessie klopt dus alle gegevens op de pagina weergeven.
  6. $bestand = $_GET['f'];
  7. if (f == 1) {
  8. include('bestand1.php');
  9. } elseif (f == 2) {
  10. include('bestand2.php');
  11. } else {
  12. echo "Wat is dit voor onzin. Ik weet niet wat ik moet weergeven, voor iets in waar ik wel wat op kan laten zien. ;-)";
  13. }
  14. //if van het vorige bestand afsluiten
  15. }
  16. //als de sessie niet klopt
  17. else
  18. {
  19. //wordt een alternatieve tekst weergegeven
  20. '<h3 class="title">Fout</h3>
  21. <p class="content">Dit is geen openbare pagina, je moet ingelogd zijn om toegang te hebben tot deze pagina!</p>'
  22. }
  23. ?>


Je url moet wel dit dan erachter hebben bij dat bestand ?f=1 ofzo.
Offline simonopsomer - 24/02/2007 14:38
Avatar van simonopsomer Nieuw lid @Threetimes:

sorry, ik snapte het eerst niet. Bedankt, daar had ik nog niet op gedacht.

Maar het is toch wel iets veiliger om nog eens te checken of alle vars wel bestaan en of hun waarden kloppen?
Offline Godlord - 24/02/2007 14:43 (laatste wijziging 24/02/2007 14:45)
Avatar van Godlord PHP gevorderde
  1. if (file_exists('jebestand.php')) {
  2. include('jebestand.php');
  3. } else {
  4. echo "Wat is dit voor onzin. Ik weet niet wat ik moet weergeven, voer iets in waar ik wel wat op kan laten zien. ;-)";
  5. }

Als je include veilig wilt maken dan kun je dat gebruiken.

Voor variables gebruik je isset(); Maar dat wist je waarschijnlijk al.
Offline simonopsomer - 24/02/2007 15:09
Avatar van simonopsomer Nieuw lid Bedankt Godlord,
ik had je vorige bericht niet gezien, het was zoiets dat ik bedoelde.

Bedankt voor alle hulp.
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.537s