Ten eerste worden PHP-sessies niet standaard in het geheugen opgeslagen , ze worden op schijf opgeslagen, dus elk blok/sessie waarnaar u schrijft, neemt schijfruimte in beslag en geen geheugen (totdat u PHP gebruikt om de sessiegegevens te lezen).
Ja, u bent mogelijk efficiënter, maar niet als u wilt schalen en dit is waarom:
Gegevens opslaan in sessies
Het is volkomen acceptabel om sommige . op te slaan gegevens in sessies. Theoretisch is er geen limiet (hoewel ik nooit heb geprobeerd om het te doorbreken of zelfs maar te pushen, ga gewoon naar een efficiëntere oplossing). U wordt echter beperkt door schijfruimte en PHP memory_limit()
.
Gegevens die in sessies zijn opgeslagen, bevatten vaak zaken als:
- Gebruikersnamen
- Hashes
- Registratiedata
- Andere variabelen (gebruikersgroep-ID's/sleutels enz.)
- Flash-berichten
- (GEEN wachtwoorden!)
Er is echter een afweging. Als uw verkeer (en gebruik) toeneemt en u veel gegevens opslaat in $_SESSION
, zult u zeer waarschijnlijk problemen gaan zien, zowel in termen van schijf- als geheugengebruik.
Ik denk niet dat er een probleem is met wat je voorstelt, maar behalve de items die je hebt genoemd en waar de bovenstaande voorbeelden elkaar overlappen, is voorzichtigheid geboden.
Als je (horizontaal) wilt schalen en schijfgebaseerde sessies wilt behouden, heb je opties ( plakkerige sessies of storage area network zijn een paar) omdat de schijf op de ene server niet dezelfde sessies opslaat als een schijf op een andere server.
Locatie van sessiegegevens
U kunt de locatie vinden waar PHP sessiegegevens opslaat door te bellen naar: session_save_path()
of op de CLI:
php -r 'echo session_save_path(), "\n";'
Je hebt je besturingssysteem niet genoemd, maar de gebruikelijke locaties voor de sessiebestanden (over verschillende typen besturingssystemen) zijn:
/tmp
/var/lib/php5/
/var/lib/php/session
c:/wamp/tmp
Sessies die op schijf zijn opgeslagen, hebben meestal bestandsnamen die er zo uitzien met behulp van ls -al
:
-rw------- 1 www www 0 2013-07-09 20:12 sess_bdsdjedmvtas5njhr5530b8rq6
Het is vermeldenswaard dat er vaak afvalinzamelingsprocessen zijn die dode sessies na bepaalde perioden opruimen. Het verschilt per besturingssysteem, maar ze zijn meestal aanwezig bij verschillende op LAMP gebaseerde installaties.
Andere opties/benaderingen voor sessieopslag
In uw database
Sessiegegevens worden vaak opgeslagen in een DB in plaats van op een lokale schijf en dit werkt goed voor zowel micro-, kleine als (afhankelijk van hoe het is gedaan) middelgrote sites met een redelijk verkeersniveau.
Net als elke andere oplossing heeft het zijn voor- en nadelen (zoals een gebruiker kunnen bannen/kicken door een query uit te voeren in plaats van een sessiebestand te verwijderen van /tmp
)
Ter herinnering
voor grotere (meer verkeer) sites en met name waar het aantal gelijktijdige gebruikers hoog is, is het geheugen sneller te lezen/schrijven voor zeer vaak gebruikte variabelen of gegevens in plaats van onnodige belasting aan uw database toe te voegen. Het kan en moet nog steeds naar de DB worden geschreven (zie write-through caching ), maar ook in het geheugen worden bewaard voor efficiënte toegang.
Een techniek van bijzondere waarde is geheugencaching . Een veelgebruikt voorbeeld van een PHP-compatibele open-sourceoplossing is Memcached , die op één server of op meerdere [gedistribueerde] kan worden gebruikt. Ik heb dit zowel door kleine als grote bedrijven zien gebruiken en je hoeft alleen maar te kijken naar wie het gebruikt/bijdragen...