sql >> Databasteknik >  >> RDS >> Mysql

Sessionsvariabler:Hur mycket data är för mycket?

För det första, PHP-sessioner lagras inte i minnet som standard , de lagras på disk, så varje block/session du skriver till kommer att uppta diskutrymme och inte minne (tills du använder PHP för att läsa sessionsdata).

Ja, du är potentiellt mer effektiv, men inte om du vill skala och här är anledningen:


Lagra data i sessioner

Det är helt acceptabelt att lagra en del data i sessioner. Teoretiskt sett finns det ingen gräns (även om jag aldrig har försökt att bryta den eller ens trycka på den, bara gå till en mer effektiv lösning). Du kommer dock att begränsas av diskutrymme och PHP memory_limit() .

Ofta innehåller data som lagras i sessioner saker som:

  • Användarnamn
  • Hashar
  • Registreringsdatum
  • Andra variabler (användargrupp-id/nycklar etc.)
  • Flashmeddelanden
  • (INTE lösenord!)

Det finns dock en avvägning. Om din trafik (och användning) ökar och du lagrar mycket data i $_SESSION , kommer du med stor sannolikhet att börja se problem, både när det gäller disk- och minnesanvändning.

Jag tror inte att det är några problem med det du föreslår, men utöver de artiklar du har listat och där exemplen ovan överlappar varandra krävs försiktighet.

Om du vill skala (horisontellt) och behålla diskbaserade sessioner har du alternativ ( klibbiga sessioner eller lagringsnätverk är ett par) eftersom disken på en server inte lagrar samma sessioner som en disk på en annan server.


Sessionsdataplats

Du kan hitta platsen där PHP lagrar sessionsdata genom att ringa: session_save_path()

eller på CLI:

php -r 'echo session_save_path(), "\n";'

Du har inte nämnt ditt operativsystem, men vanliga platser för sessionsfilerna (för olika OS-typer) är:

/tmp 
/var/lib/php5/
/var/lib/php/session
c:/wamp/tmp

Sessioner lagrade på disk har vanligtvis filnamn som ser ut så här med ls -al :

-rw-------  1 www www      0 2013-07-09 20:12 sess_bdsdjedmvtas5njhr5530b8rq6

Det är värt att notera att det ofta finns processer för insamling av sopor som rensar ut döda sessioner efter specifika perioder. Det varierar beroende på operativsystem, men de finns vanligtvis med olika LAMP-baserade installationer.


Andra sessionslagringsalternativ/tillvägagångssätt

I din databas
Sessionsdata lagras ofta i en DB istället för på lokal disk och detta fungerar bra för både mikro-, små och (beroende på hur det görs) medelstora webbplatser med en rimlig nivå av trafik.

Precis som alla andra lösningar har den sina för- och nackdelar (som att kunna blockera/kicka ut en användare genom att köra en fråga istället för att ta bort en sessionsfil från /tmp )

Till minne
för större, (högtrafik) webbplatser och särskilt där volymen av samtidiga användare är hög, är minnet snabbare att läsa/skriva till för mycket ofta åtkomliga variabler eller data istället för att lägga onödig belastning på din DB. Det kan och bör fortfarande skrivas till databasen (Se genomskrivningscache ), men också hållas i minnet för effektiv åtkomst.

En teknik av särskild merit är minnescache . Ett allmänt använt exempel på PHP-kompatibel öppen källkodslösning är Memcached , som kan användas på en server eller många [distribuerade]. Jag har sett detta användas av små företag såväl som stora och du behöver bara titta på vem som använder det/bidrar...



  1. SQL Server-säkerhetskopiering/återställning kontra ta bort/fästa

  2. MySQL:s alternativ till T-SQL:s MED BAND

  3. I SQL, hur man väljer de två översta raderna för varje grupp

  4. MySQL välj formaterat datum från millisekundsfältet