[PHP] Sessies in standaard files of in database?

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Reveller
  • Registratie: Augustus 2002
  • Laatst online: 05-12-2022
PHP geeft dmv session_set_save_handler de mogelijkheid om eigen session-handling functies te maken. Veel open-source projecten maken gebruik van deze functie, om functies te definieren die sessie-informatie opslaan in een database in plaats van de het PHP-session bestand.

Nu ik zelf bezig ben met het maken van een user-systeem, vraag ik me af wat het voordeel is van sessie-informatie opslaan in de database. Na lang zoeken ben ik een aantal voordelen tegen gekomen:
  • je kunt tellen hoeveel en welke (ingelogde) mensen online zijn
  • het is veiliger
  • bij grote sessies of veel simultane sessies is het sneller
Het zwakke vind ik alleen dat mensen die deze punten gaven (o.a. in codewalkers-artikelen) ze niet verder onderbouwen:
  • zo kun je volgens mij ook de session.save_path directory doorlopen, de sessiebestanden uitlezen en zo uit die bestanden de namen van de ingelogde gebruikers halen?
  • over het tweede punt: wat is er dan precies veiliger vraag ik me af. Het enige wat ik kan bedenken in dat je bij sessies in bestanden het risico loopt dat je ook anderen je sessies kunnen bekijken, wanneer je op een shared hosting account zit
  • klopt die snelheid? Met sessies in een database moet je wel voor het destroyen, updaten en openen van elke sessie een connectie openen en een query uitvoeren. Is dat sneller dan via filesystem een fysiek bestand verwijderen, updaten, etc.?
Mijn vraag is dus eigenlijk: wat weet jij van deze punten en heb je misschien andere argumenten voor of tegen het opslaan van sessies in een database?

"Real software engineers work from 9 to 5, because that is the way the job is described in the formal spec. Working late would feel like using an undocumented external procedure."


Acties:
  • 0 Henk 'm!

  • Radiant
  • Registratie: Juli 2003
  • Niet online

Radiant

Certified MS Bob Administrator

Ik kies zelf altijd liever voor het opslaan in een database, omdat het makkelijker is om inderdaad bijvoorbeeld te zien wie er online zijn, als je alle session files uit moet lezen en parsen is dat langzamer dan één simpele database query.
Veiliger is het niet, even onveilig :), je kan natuurlijk met sessies in files gewoon die files uitlezen maar met sessies in een database kunnen anderen in je php scripts kijken naar de login voor de database en alsnog de sessie informatie zien. Als je een goede hoster hebt die safemode met basedir restrictie aan heeft staan is dit natuurlijk geen probleem.
Als je een site hebt die zowiezo SQL gebruikt maakt het niet veel uit dat je nog extra queries moet doen, het lijkt me in ieder geval sneller dan uit allerlei files uitlezen.

[ Voor 3% gewijzigd door Radiant op 22-01-2005 18:12 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Er zijn 2 grote voordelen om sessies op te slaan in de database. Ten eerste heb je wanneer deze op de webserver staan redelijk wat I/O om sessies te lezen en en weer te schrijven. In de database gaat dit sneller. Daarnaast is het handig wanneer je website bijvoorbeeld meerdere webserver heeft (loadbalacing), stel een gebruiker komt eerst op server 1 uit, een sessie wordt gezet, en komt bij het volgende request op server 2 uit, daar is de sessie dan niet beschikbaar. Wanneer je sessie in de database is opgeslagen is de sessie informatie altijd beschikbaar.