Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 17
  1. #1
    Utente di HTML.it L'avatar di Virus_101
    Registrato dal
    Sep 2008
    Messaggi
    2,497

    COSE SERIE :: sessioni custom

    Come da titolo,
    sto facendo alcuni test sulla gestione custom delle sessioni, quindi non piu' delegando a php tutta le gestione dei dati di sessione ma "registrando" i mei handlers personali.
    Dalla 5.4 c'e' una bellissima interfaccia da implementare che fornisce gia' le definizioni dei metodi.
    MA nella 5.3 questa non c'e'.

    Ho impostato il codice (OVVIAMENTE E' SOLO PER TESTARE!!!) :

    1- factory per avviare la registrazione dei metodi della classe al punto 3.
    2- interfaccia
    3- classe che implementa l'interfaccia

    (RIPETO :: e' solo codice di prova per velocità di scrittura del codice per i test, nei vari script posso fare " sessionFactory::registerHandlers() " e ho finito di preoccuparmi.

    Cmq per gestire le read/write ho impostato una tabella innoDB con alcune colonne per gestire i dati di session (sessionId,sessionValue,creation,lastEdit,maxLifet ime-still unused 4 now) ...

    Ora ho implementato la gestione delle read/write "lockando in share mode" prima di eseguire update o altre cose sulla riga interessata. QUindi ho impostato le destroye etc.... funziona tutto anche con chiamate ajax e chiamate concorrenti.

    Ora pero' ho 1 dubbio.

    Se la sessione scade che succede ?
    Gli script di test regitrano il mio codice per gestire la sessione ma a morte dello script ?
    Tali handlers non ci sono piu', come faccio a rimuovere la sessione dal db quando l'utente spegne il browser e va pinciare la bambola gonfiabile ?
    Pensavo di gestire il garbage collector aggiungendo il contatore di sessioni aperte... ma non so... Se avete qualche idea piu' precisa / migliore sto qua..

  2. #2
    Utente di HTML.it L'avatar di Virus_101
    Registrato dal
    Sep 2008
    Messaggi
    2,497
    Up ...

    nessuno ???????

  3. #3
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    3,709
    la scadenza implicita delle sessioni è un problema noto e ci sono varie soluzioni che vengono utilizzate... intanto i controlli durante l'utilizzo dovrebbero garantire la consistenza delle sessioni stesse, mentre tipicamente si utilizza un timeout (a volte anche forzato, cioè dopo X minuti la sessione scade anche se l'utente è loggato, ma dipende da che tipo di sistema si sta usando: può essere "pericolosa" questa scelta)

  4. #4
    Utente di HTML.it L'avatar di Virus_101
    Registrato dal
    Sep 2008
    Messaggi
    2,497
    La mia idea sarebbe questa :

    1- inserire un contatore di riferimenti
    2- re-impostare iil medodo di grabage collection in modo che :
    - estrapoli con "lock in share mode" tutte le sessioni con 0 riferimenti
    - controlli l'ultima modifica
    - se mod superiore a timeout elimina la riga.

    In modo che quando parte il gc pulisca le sessioni intattive.
    Unitamente al fatto di controllare sempre i timeouts a read della sessione.

    Certo che e' comodo registrare gli handlers per poter gestire manualmente le sessioni. E' pazzesco che non posso allocare tali handlers in sessione al primo avvio dell'app e poi lasciarli lavorare per tutti..... ma questo di persistenze e' gestibile in php ? Se si come ?

  5. #5
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    3,709
    non ho ben capito cosa vorresti con "allocare gli handlers in sessione"... puoi spiegare meglio questo aspetto?

  6. #6
    Utente di HTML.it L'avatar di Virus_101
    Registrato dal
    Sep 2008
    Messaggi
    2,497
    no fermo persistenza e sessioni sono 2 cose diverse.

    Ho lavorato su hibernate su server tomcat e devo dire che la possibilità di usare le persistenze e' una cosa davvero bella. In php si sente molto questa mancanza e in questo caso appunto a scandenza sessione se fosse possibile registrare gli handlers e stiparli in memoria del server ad avvio dell'applicazione sarebbe una bombardata.

    Il problema e' chq in php la gestione custom delle sessione avviente tramite registrazione di funzioni (o classe + relativi metodi) ad avvio dello script. quindi tutte le operazioni di gestione sessione sono passate alle tue funzioni invece che alle procedure std di PHP.
    MA, se quando una sessione va in timeout ? Che succede ? Non so se PHP la gestisca internamente con qualche listener .... so che se va in timeout dealloca i dati e amen.
    Quindi non c'e' modo di sapere se la sessione e' in timeout se non controllato la timestamp dell'ultima op eseguita a riavvio della sessione ( alla prima read che viene eseguita).

    La possibilità di gestire il garbage collector d'altro canto mi da la possibilità di fare un controllo su tutte le sessioni ogni volta che viene lanciata la mia procedura di garbage colletion. Il problema e' che tale procedura viene avviata quando ? ogni utente che ha una sessione e i relativi handlers puo' lanciarla ? Viene instanziata 1 volta sola e amen ? Se lo script termina viene deallocato tutto e tanti cari saluti alle mie procedure ?

    Una bella soluzione sarebbe proprio la possibilità di gestire le persistenze, cosi' da poter creare correttamente le factory di gestione e al primo avvio dell'applicazione si carica l'ambiente che l'app deve usare e quindi non serve piu' re-istanziare nulla. Inserendo quindi gli handlers per le sessioni lo si fa la prima volta e basta poi sono pronti all'uso per ogni successiva necessita( con tanto sollievo del server che non deve riallocare / re-instanziare tutto ogni volta).

    Ora cio' si puo' fare ?

  7. #7
    Originariamente inviato da Virus_101
    Ora cio' si puo' fare ?
    Con PHP no.

  8. #8
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    3,709
    ho fatto esperimenti e lavori su cose simili, ma non esattamente su un problema come quello che mi pare tu abbia... in effetti risolverlo direttamente forse non si può, ma con un artificio... ... ... (puntini di sospensione)

  9. #9
    Utente di HTML.it L'avatar di Virus_101
    Registrato dal
    Sep 2008
    Messaggi
    2,497
    Ecco ho una risposta sconfortante ..... ma 1 risposta.

    Peccato sarebbe il next step ... per php ... vabb penso che alla fine gestisco tutto come al solito e nelle procedure di read/write etc lancio il controllo sul timeout... e nel caso lancio il metodo destroy .... e mi tolgo il problema....

    Grazie a totods

    P.S.
    peccato pero' ..... speriamo un giorno si possa fare .

  10. #10
    Utente di HTML.it L'avatar di Luke70
    Registrato dal
    Jul 1999
    Messaggi
    767
    Ciao!
    Anche io ho risolto con una query che elimina le righe "vecchie". Non credo ci siano altre possibilità.
    Nel mio caso avevo bisogno di memorizzare pochi dati testuali. Tu hai pensato anche al salvataggio di oggetti od array? Bisogna serializzarli?

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.