Domanda

Ho un'applicazione web all'interno della quale devo verificare se l'utente dispone di autorizzazioni / ruoli / diritti sufficienti per accedere alla pagina. Avevo impostato i diritti degli utenti in una tabella con USER_ID , ROLE_ID . e quando un utente accede all'applicazione, leggerò i record per questo utente e costruirò una stringa e assegnerò a una variabile di sessione. Quando l'utente che ha effettuato l'accesso accede a ciascuna pagina, leggerò il valore dalla variabile di sessione, quindi analizzerò la stringa e quindi verificherò se a questo utente sono assegnati diritti sufficienti.

Ora temo che l'accesso alla variabile di sessione in ogni caricamento di pagine possa influire sulle prestazioni. C'è un modo alternativo per risolvere questo?

È stato utile?

Soluzione

Dovresti vedere un guadagno netto nelle prestazioni.

Ci vorrà un po 'di risorse per caricare la sessione, ma di solito sarà molto inferiore alle risorse necessarie per recuperare un record dal database, il che può comportare la creazione di una connessione, l'autenticazione, l'analisi della query, il recupero di un record e l'invio su una rete. Rispetto a questo, rimuovere un file di sessione dal disco rigido è molto più veloce.

Sembra che tu stia cercando di ottimizzare prematuramente. Dovresti aspettare un po ', quindi monitorare per vedere dove sono realmente i tuoi colli di bottiglia.

Altri suggerimenti

no, non influirà in modo evidente sulle prestazioni del tuo sito (a meno che tu non abbia centinaia di utenti al secondo).

ma ho notato qualcosa:

  

(...) Leggerò i record per questo utente e costruirò una stringa e assegnerò una variabile di sessione. Quando l'utente che ha effettuato l'accesso accede a ciascuna pagina, leggerò il valore dalla variabile di sessione e quindi analizzerò la stringa (...)

a-ha! vedi, le sessioni non sono altro che stringhe codificate e analizzate su session_start () (normalmente, serialize () e unserialize () sono usati per Questo). non è necessario codificare manualmente i dati che verranno archiviati nella sessione, è fatto per te (e sicuramente più velocemente di qualsiasi metodo personalizzato, poiché queste funzionalità sono implementate nel core).

Se usi il gestore di sessione nativo di PHP la sessione i dati verranno probabilmente recuperati su ogni richiesta utilizzata dalla sessione, indipendentemente dal fatto che si acceda o meno ai dati della sessione. E poiché il il gestore di sessioni predefinito utilizza i file per archiviare i dati, causerà anche la lettura del file su ogni richiesta.

Se vuoi ottimizzare questo, potresti usare un qualche tipo di cache in cui archiviare le sessioni. Forse una cache di memoria come APC o Memcache (vedi anche questo commento alla funzione session_set_save_handler ).

In aggiunta a ciò che Greg ha detto sopra.

Ci sono 2 tipi di sessioni in php. Sessioni memorizzate in un database e sessioni memorizzate in un file (di solito in / tmp / session_something);

L'opzione Database ha un sovraccarico nella creazione di un socket e nell'invio / recupero dei dati. Presenta vantaggi come una sessione in grado di essere persistente su più server / macchine.

La seconda opzione delle informazioni sulla sessione memorizzate in un file è probabilmente la migliore per le prestazioni perché un sistema operativo come Linux può memorizzare nella cache / buffer le scritture di lettura in un file in memoria.

Quindi la risposta è breve, non ti preoccupare nemmeno che l'overhead non sia nulla, non esca con esca, ma se ti interessasse davvero delle prestazioni non useresti PHP.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top