[PHP/MySQL] Volgorde diverse functies

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Edjaaah
  • Registratie: December 2004
  • Laatst online: 24-02-2016
Ik ben aan het experimenteren met het doorontwikkelen van een vrij basic login-/membersysteem. Mijn voornaamste doel is het verbeteren van de beveiliging. Aan het begin van elke pagina staan drie functies, maar ik kan niet echt doorgronden in welke volgorde deze moeten staan.

Het gaat om:
- Database connectie;
- Session start en regenerate id;
- Session hijack check met unset en destroy.

De auteur van het originele script heeft in zijn opmerkingen staan dat de Session start altijd bovenaan de pagina moet staan. Betekent dit dan ook dat deze eerder komt dan de database connectie? En wil ik dan ook pas een database connectie maken wanneer de gebruiker door de session hijack check heen is?

Dan is natuurlijk de voornaamste vraag ook waarom de juiste volgorde de juiste volgorde is.

Democratie kost een Fortuyn


Acties:
  • 0 Henk 'm!

Verwijderd

Mensen die in een script zetten dat session_start aan het begin van een pagina moet, weten niet waarmee ze precies bezig zijn en moeten zich beter inlezen.

En die databaseconnectie? Of die eerder of later moet is afhankelijk van je applicatie. Als je sessies in de database wegschrijft, lijkt het mij handig eerst die databaseconnectie te maken.

Maar om eerlijk te zijn zijn dit onzinnige vragen. Er is geen beste manier. Als je weet wat je doet, doe je het waarschijnlijk goed, en als je niet weet wat je doet, doe je het waarschijnlijk verkeerd. Zorg dat je zelf kunt beoordelen of je iets goed doet, door gewoon te begrijpen hoe jouw specifieke applicatie in elkaar moet zitten.

Acties:
  • 0 Henk 'm!

  • _eXistenZ_
  • Registratie: Februari 2004
  • Laatst online: 13:35
Stel je iig voor dat je je database kunt ontlasten door in een session ook op te nemen of iemand is ingelogd.

Ikzelf doe meestal zo:
code:
1
2
3
4
5
inlogcheck() {
    - check of de juiste session-data aanwezig is --> je bent ingelogd
    - check of de juiste cookies soms gezet zijn --> probeer hiermee in te loggen en session aanmaken etc.
    - anders ben je niet ingelogd (unset sessions / cookies / etc)
}


De enige keer dat ik de DB benader is dus bij een nieuwe login :) Nouja stiekum toch elke keer maar das omdat ik nog wat extra dingen doe maar das buiten de scope van jevraag.

Iig dit is één manier, je kunt maken wat je wil. Verdiep je iig in Zend Framework, die doet alles al voor je.

There is no replacement for displacement!


Acties:
  • 0 Henk 'm!

  • Gomez12
  • Registratie: Maart 2001
  • Laatst online: 17-10-2023
Simpel gezegd, mits je geen output buffering toepast moet je session start altijd het eerste zijn wat client-output genereert op je pagina.

Poor man's solution is om dan maar simpelweg session start op de 1e regel te zetten. Betere oplossing is om je database connectie class geen eigen client-output te laten genereren en als er errors optreden deze door je eigen error-control class heen te laten lopen zodat ze op het tijdstip dat jij het wilt jouw error-melding tonen

Acties:
  • 0 Henk 'm!

  • _eXistenZ_
  • Registratie: Februari 2004
  • Laatst online: 13:35
Gomez12 schreef op vrijdag 13 april 2012 @ 23:10:
Simpel gezegd, mits je geen output buffering toepast moet je session start altijd het eerste zijn wat client-output genereert op je pagina.
Lolwut? Zolang je session_start() maar doet voor je iets uit je session wilt halen, is het vroeg zat. Dit kan dus ook onderaan je script zijn als je daar pas een username wilt printen ofzo... Allerhande errors kunnen ervoor zorgen dat je perongeluk output krijgt maar da's gewoon sloppy... Je kunt je code prima zo maken dat bij error_reporting(E_ALL) en display_errors(true) helemaal niks geoutput wordt, behalve de echo's, var_dumps, en prints die je doet... session_start() genereert iig zelf geen output.

[ Voor 3% gewijzigd door _eXistenZ_ op 13-04-2012 23:17 ]

There is no replacement for displacement!


Acties:
  • 0 Henk 'm!

  • bartbh
  • Registratie: Maart 2004
  • Niet online
Maar als je output hebt vóór je session_start aanroept, dan krijg je wel errors. Exact wat Gomez12 zegt.

Makkelijkste oplossing is dan dus inderdaad om te zorgen dat deze bovenaan je pagina staat. Als je je systeem wat beter opbouwt kan dat inderdaad ook wel aan het einde van je script, maar altijd nog vóór je output naar de client stuurt.

edit: zoals jij het verwoord heb je het over vóór je iets uit de session gebruikt, dat is dus niet waar. Áls je iets uit de sesion wil gebruiken, zul je de session moeten starten/initiëren vóór enige output.

Enige, vieze, output buffering achterwege gelaten uiteraard.

[ Voor 28% gewijzigd door bartbh op 13-04-2012 23:30 ]


Acties:
  • 0 Henk 'm!

  • Gomez12
  • Registratie: Maart 2001
  • Laatst online: 17-10-2023
_eXistenZ_ schreef op vrijdag 13 april 2012 @ 23:15:
[...]
Lolwut? Zolang je session_start() maar doet voor je iets uit je session wilt halen, is het vroeg zat.
Even uitgaande van default session handler en settings (zoals ik zei : simpel gezegd) werken sessions standaard cookie-based en genereert het dus een header (=client-side output)
Http-headers moeten voor de http-body komen.

Dus ja, je kan client-side output genereren (andere headers) voor je default session_start
En ja, je kan met custom session-handlers / session-settings het gedrag veranderen
En ja, je kan met frameworks / mvc etc etc het anders doen
Maar dan kan je bijna geen enkel vraag over php meer beantwoorden, want dan kan alles (desnoods moet je source downloaden en veranderen en recompilen)

Acties:
  • 0 Henk 'm!

  • Edjaaah
  • Registratie: December 2004
  • Laatst online: 24-02-2016
Dank voor al jullie reacties. Ik sla geen Session data op in de database, de enige keer wanneer de database aangeroepen wordt is idd bij de login. Mij leek/lijkt het logisch te starten met de Session start, dan de hijack check uit te voeren en als die geslaagd is een database connectie te maken. Aangezien ik geen expert ben wilde ik dit graag checken.

Ik ga iig kijken naar het Zend Framework :)

Democratie kost een Fortuyn

Pagina: 1