Gegevens opslaan in sessie of niet
Om ts zijn topic niet te "stelen" start ik even een nieuw.
https://www.phphulp.nl/php/forum/topic/htaccess-en-leestekens-in-gebruikersnaam/103781/last/
Ik hou rollen in de sessie voor de logins welke net NIET in de database staan.
Voor deze welke wel in de database staan worden deze elke keer vernieuwd. Deze ids zijn kleiner dan 0.
session_regenerate_id heb ik wel toegevoegd. Ik had dat vroeger ook maar was blijkbaar bij de grote opkuis verdwenen:(
HTTP Authenticatie kende ik niet, wel eens gehoord in de verte, maar ik geef toch de voorkeur aan een mooi inlogformulierke.
Jan
- Anders loop je inderdaad de kans dat de gegevens verouderd zijn (rechten ingetrokken, maar user was nog ingelogd en kan dus vrolijk doorgaan).
- Bij veel gebruikers en een "grote sessie" loopt je /tmp vol (of waar de sessie bestanden ook staan; vaak een RAM disk met beperkte omvang), en/of trekt het sowieso een grote wissel op je disk IO (elke keer die hele bups data lezen/schrijven).
2) Gegevens die voor elke call opgehaald moeten worden (gebruikersgegevens, rechten, enz) toch maar (tijdelijk) "cachen" in de sessie.
- Het scheelt een hoop requests naar de DB toe. Als de rechten via een aantal joins over rollen/profielen heen bij elkaar geharkt moeten worden zijn het meestal ook niet de meest soepele queries.
- Een initiële pagina request ("de HTML") heeft vaak direct daarna een aantal AJAX calls tot gevolg. De kans dat binnen die paar seconden de rechten zijn herzien is natuurlijk minimaal. Meestal cache ik dit soort info dan ook in de sessie met een timestamp er bij. Na een x aantal seconden wordt de informatie dan toch opnieuw opgehaald (maar hoeft dus voor die directe AJAX requests niet steeds opnieuw bepaald te worden).
Vervolgens gebruikt je applicatie (hoe dan ook) uitsluitend dit user object, en heeft de sessie in het geheel niet nodig, dit zorgt ook voor een wat nettere scheiding.
Dat was ook het idee: 1) is leidend, 2) moet soms toch af en toe ("omslagpunt"). Maar indien niet nodig, dan inderdaad gewoon bij 2) vandaan blijven.