Visualizzazione risultati 1 fino 3 di 3
Like Tree1Likes
  • 1 Post By mzanella

Discussione: Dubbio su sessioni PHP

  1. #1
    Guest

    Predefinito Dubbio su sessioni PHP

    Salve ragazzi, ho un dubbio sull'uso delle sessioni in PHP.

    Sostanzialmente, da ciò che ho capito online, le sessioni in PHP vengono gestite in questo modo:
    Il server genera un cookie(PHPSSID) che contiene la SID (Session ID) che viene inviato al client, nel contempo il server crea un file (Quindi memorizzato sull'Hard Disk) che ha come nome la SID inviata al client, ed esso (non nel caso di AV, ovviamente) viene salvato sul path definito nel file php.ini. Ora il mio dubbio è questo, sostanzialmente quando utilizziamo il comando session_start() creiamo l'array superglobale $_SESSION (Quindi attualmente si trova in RAM) che contiene tutte le variabili di sessione ed esso viene salvato sul file una volta chiusa la sessione o utilizzato il comando session_commit(). Dunque le variabili di sessione rimangono in RAM per tutto il tempo e a sessione chiusa vengono salvate sull'HD nel file corrispondente, che però sostanzialmente, diventa subito un file "scaduto" perchè a sessione terminata il cookie corrispondente scade appunto perchè la sessione è scaduta. Che utilità ha il file memorizzato sull'hard disk se tanto si lavora sempre in RAM con $_SESSION? E' corretta la procedura di utilizzo di file/variabili di sessione che ho descritto oppure ho mancato qualcosa?

    Grazie in anticipo a chi mi risponderà, buon pomeriggio!

  2. #2
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,683

    Predefinito

    Citazione Originalmente inviato da dandbase Visualizza messaggio
    Dunque le variabili di sessione rimangono in RAM per tutto il tempo
    Non ne sono sicuro al 100%, ma penso che le variabili di sessione rimangono in RAM solamente il tempo di generazione della pagina. Il server impiega (normalmente) poco tempo per generare la pagina, una volta creata aggiorna le variabili di sessione in HDD (se necessario) e termina il lavoro per quell'utente. Infatti non è necessario session_commit() a parte per scritture concorrenti.

    Tieni presente che sul server potenzialmente ci possono essere un numero molto elevato di persone, quindi mantenendo tutte le sessioni in ram sarebbe un utilizzo elevato di RAM.


    Ciao!

  3. #3
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    Citazione Originalmente inviato da dandbase Visualizza messaggio
    Il server genera un cookie(PHPSSID) che contiene la SID (Session ID) che viene inviato al client
    In generale non e' cosi', esistono modi alternativi per gestire l'uso delle sessioni in PHP senza utilizzare cookie. L'uso dei cookie resta comunque l'approccio piu' comunque, e viene usato anche su AlterVista.


    nel contempo il server crea un file (Quindi memorizzato sull'Hard Disk) che ha come nome la SID inviata al client, ed esso (non nel caso di AV, ovviamente) viene salvato sul path definito nel file php.ini.
    Non e' detto, il server puo' gestire in diversi modi la persistenza delle sessioni, ad esempio puo' essere configurato per tenerle solo in RAM, eventualmente usando una strategia di swap quando necessario. Un altro approccio e' la persistenza sul filesystem, ma questo non vuol dire necessariamente che "il server crea un file [...] che ha come nome la SID[/i], significa piuttosto che i dati della sessione vengono salvati nel silesystem e che e' possibile accedervi usando la SID come chiave. Che si tratti di un file per ogni sessione, di un database o di un albero e' un dettaglio implementativo.
    In ogni caso, come sviluppatore PHP, non hai bisogno di conoscere i dettagli implementativi, poiche' l'utilizzo delle sessioni e' il medesimo a prescindere dalla strategia di memorizzazione.


    quando utilizziamo il comando session_start() creiamo l'array superglobale $_SESSION (Quindi attualmente si trova in RAM) che contiene tutte le variabili di sessione
    Corretto, poiche' lo script e' in esecuzione il vettore si trova nella RAM.

    ed esso viene salvato sul file una volta chiusa la sessione o utilizzato il comando session_commit().
    Non e' detto, come conseguenza dei punti precedenti.

    Dunque le variabili di sessione rimangono in RAM per tutto il tempo e a sessione chiusa vengono salvate sull'HD nel file corrispondente
    No, assumendo che il server usi il filesystem per la persistenza dei dati la sessione resta nella RAM
    solo per il tempo di esecuzione di un singolo script. Se script diversi vengono eseguiti durante la stessa sessione, il vettore che rappresenta quest'ultima viene verosimilmente riscritto e riletto per ogni script (ovviamente intervengono strategie di caching che cerano di evitare il piu' possibile le continue riscritture).

    che però sostanzialmente, diventa subito un file "scaduto" perchè a sessione terminata il cookie corrispondente scade appunto perchè la sessione è scaduta.
    Poiche' la sessione resta in RAM fintanto che lo script e' in esecuzione, quando questa viene deallocata dalla memoria non e' vero che la sessione e' necessariamente terminata, quindi e' corretto che sia presente il file (o altro sistema di persistenza) non scaduto.

    Questo nell'ipotesi che il server sia configurato per avvalersi del filesystem per la persistenza delle sessioni. Se si basa solo sulla RAM o altri sistemi le tue domande non si pongono a priori.

    Il discorso e' comunque reso piu' complesso da cache e simili, e da vari parametri di configurazione.

    In ogni caso, il funzionamento lato PHP e' trasparente rispetto a questi dettagli.
    karl94 likes this.

    I suggerimenti che do più spesso:


Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •