Wat mag je allemaal in een session array zetten?

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Mohamed nvt

Mohamed nvt

17/12/2020 23:27:05
Quote Anchor link
Over de session heb ik geleerd dat het eigenlijk een array is en dat je een waarde/variabel in mag zetten. Maar wat ik niet helemaal heb begrepen is;

De waarde dat je in zet, bepaal je dat zelf?
of het moet perse bestaat in de database?

Hieronder een voorbeeld sessie waarin de user_level instaat en deze waarde komt exact overeen met wat in de database is.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
$_SESSION['user_level']


Alvast bedankt voor jullie uitleg.
Gewijzigd op 18/12/2020 00:05:14 door Mohamed nvt
 
PHP hulp

PHP hulp

28/11/2024 21:51:21
 
- Ariën  -
Beheerder

- Ariën -

17/12/2020 23:43:33
Quote Anchor link
Je kan er alles in zetten wat je wilt.
Na het sluiten van je browser zal het sessie koekje worden verwijderd.

Ik raad wel aan om zuinig te zijn met je data die je in je sessie zet. Gebruikersnamen en wachtwoorden zijn overbodig.
 
Thom nvt

Thom nvt

18/12/2020 07:25:17
Quote Anchor link
Ook goed om even te vermelden waarom je er zuinig mee moet zijn.

Bij elk verzoek word die sessie-array ingeladen in het geheugen. Bij standaard-configuraties is dat meestal vanaf een bestand op de harde schijf. Dit kan de nodige vertraging met zich mee brengen, zeker als het om veel data en/of traffic gaat.
Zelfs met een andere session-storage zoals memcached of Redis kan het een aardig wat I/O vragen wat de performance niet ten goede komt.
Al die (kilo/mega)bytes tellen rap op.
 

19/12/2020 12:29:51
Quote Anchor link
De globale $_SESSION variabele is bedoeld om HTTP-sessies te makkelijk te maken. Je zou dan moeten willen weten wat HTTP-sessies zijn en waarom ze nodig zijn, en wat het effect is van het gebruik van PHP sessies.

De korte uitleg is deze: elke keer als je met een browser een website bezoekt, is het voor de webserver die de site naar de browser stuurt alsof je voor de eerste keer de website bezoekt. Dat noemen ze 'stateless', er wordt niet bijgehouden wat de staat is van het bezoek. De webserver onthoudt standaard niets.
Voor veel websites of onderdelen van websites, zoals media, stijlinformatie of statische scripts is dat genoeg. Maar niet voor alles, zoals bij webwinkels of andere sites waar je moet inloggen. Wanneer de HTML-uitvoer van de webserver moet afhangen van bepaalde omstandigen, moet de 'staat' van het bezoek ergens worden opgeslagen.

Een veel voorkomende situatie is wanneer iemand inlogt op een website. Dan moet PHP ervoor zorgen dat je te zien krijgt dat je bent ingelogd en onder welke naam, en dat moet ergens worden onthouden. Het onthouden doet PHP niet zelf, dat wordt aan de browser overgelaten. PHP stuurt dan een Cookie aan de browser met een sessie ID, met een cryptisch ticketnummer waarmee hij je kan herkennen wanneer je een tweede pagina bezoekt. De sessie ID moet natuurlijk wel goed beveiligd zodat niemand hem kan raden, afluisteren of overnemen. Zodra je tegen PHP vertelt dat je $_SESSION wilt gebruiken, verzorgt PHP aan de hand van het sessie ID automatisch het onthouden, door aan het begin van jouw script de gegevens te laden in $_SESSION, en aan het eind van het script op te slaan. De gegevens in $_SESSION worden opgeslagen als een lange tekenreeks. Het proces van geheugen omzetten naar zo'n tekenreeks noemen ze serialiseren, en het omgekeerde deserialiseren.

$_SESSION is een associatieve array, en je kunt er alles inzetten. De platte data (scalars) zoals getallen en tekenreeksen en andere arrays kan je altijd meteen gebruiken. Eigen gegevenstypen kan je beter eerst zelf omzetten naar een tekenreeks met serialize() en dan pas in $_SESSION zetten. Maar je kunt ook de magische methoden __serialize() en __unserialize() in een object maken, dan worden die gebruikt.

Het is een boel informatie, maar je moet het wel weten wanneer je met sessies gaat werken.
Een paar tips:
- neem alle beveiligingstips van OWASP ter harte. Voor cookies zie:
https://cheatsheetseries.owasp.org/cheatsheets/Session_Management_Cheat_Sheet.html
- maak de PHP sessieconfiguratie veilig: https://www.php.net/manual/en/session.security.ini.php
- controleer de veiligheid van je webserver via https://www.internet.nl
- informatie over serialiseren: https://www.php.net/manual/en/function.serialize.php
- zet nooit wachtwoorden in een database, gebruik altijd password_hash() en password_verify()
- het kan handig zijn om sessiegegevens in de database op te slaan in plaats van op het bestandssysteem.
zie https://www.php.net/manual/en/session.customhandler.php
- als je meer controle wilt over de invoer en uitvoer naar de database, hoef je niet per se gebruik te maken
van de standaardfuncties in PHP, je kunt het ook zelf schrijven (maar dan moet je wel weten wat je doet!)
- je kunt ook meeliften op sessiemanagement van bestaande raamwerken, zoals Symfony
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.