Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it L'avatar di citrus
    Registrato dal
    Feb 2002
    Messaggi
    774

    rilevamento inizio sessione (tipo global.asa)

    salve a tutti...
    avrei bisogno di gestire la connessione al database in modo tale che essa venga aperta all'inizio della sessione utente e chiusa alla fine di questa.
    esite in php un modo per rilevare l'inizio e la fine di una sessione utente?
    magari una cosa tipo il file global.asa di asp???

    grazie mille
    citrus

  2. #2
    Ciao,

    di default quasi tutte le API PHP per i database chiudono automaticamente la connessione al termine dell'esecuzione dello script.

    Per il pooling delle connessioni si possono usare le connessioni persistenti, ma si chiudono anch'esse automaticamente dopo un tot. di inutilizzo. E poi nella maggior parte dei casi non convengono.

    In sostanza non porti il problema
    per favore NIENTE PVT TECNICI da sconosciuti

  3. #3
    Utente di HTML.it L'avatar di citrus
    Registrato dal
    Feb 2002
    Messaggi
    774
    mmm capisco...
    dunque il problema non si pone neppure..
    aprirò e chiuderò la connessione in ogni pagina...
    ...
    però è un peccato che non esista un modo per rilevare l'inizio e la fine sia di una sessione utente che dell'intera applicazione...
    siamo sicuri che non sia possibile?
    e se io volessi ad ex salvare informazioni su un file o mandare un cookie all'utente nel momento in cui esso chiude la sessione?
    come si potrebbe fare una cosa del genere??

  4. #4
    HTTP è un protocollo privo di stato, quindi puoi solo supporre (dopo un tot di assenza) che l'utente abbia lasciato il sito (a meno che non usi javascript per rilevare la chiusura del browser e l'unload della pagina).


    Le sessioni in PHP possono essere anche gestite con un ssitema autonomo e diverso da quello automatico, ma è un discorso lungo.

    Nei pochi casi in cui global.asa sarebbe davvero utile, in PHP per sostituire global.asa puoi usare la shared memory (poco usata e solo in sistemi Unix) o un database.

    Per quanto riguarda le connessioni al DB invece, come ti dicevo, non c'è nulla da fare, una connessione non può essere messa in sessione (e anche in ASP sarebbe sconsigliabile farlo, anche se è possibile)
    per favore NIENTE PVT TECNICI da sconosciuti

  5. #5
    Utente di HTML.it L'avatar di citrus
    Registrato dal
    Feb 2002
    Messaggi
    774
    non è possibile neppure creare una classe il cui costruttore apre la connessione e poi istanziarla usando una variabile di sessione?
    ad ex ho creato una classe che astrae il database nella quale ci sono funzioni che eseguono query e tutto ciò che serve per l'interazione con il db.
    se istanzio tale classe usando una variabile di sessione in teoria dovrebbe essere possibile aprire la connessione una sola volta e poi utilizzare la funzione di query in tutte le pagine....
    una volta che l'utente abbandona la sessione tale variabile (e di conseguenza anche la connessione) viene distrutta automaticamente....
    è possibile secondo voi o è una "porcheria"?

    grazie mille x l'interessamento
    citrus

  6. #6
    Ciao,

    non è possibile per un solo motivo, le connessioni al database in PHP sono un tipo di dato particolare (resource) che non può essere serializzato nè messo in sessione.

    Anche se fosse possibile non sarebbe consigliabile mettere in sessione una connessione al database (non lo è neppure in ASP).

    Se ti accorgi (ma solo se te ne accorgi e sei sicuro che dipenda da quello) di problemi di performance dovute al fatto che ogni volta che esegui uno script la connessione deve essere riaperta, usa le connessioni persistenti.

    Qui trovi maggiori dettagli
    http://it2.php.net/manual/en/feature...onnections.php
    per favore NIENTE PVT TECNICI da sconosciuti

  7. #7
    Utente di HTML.it L'avatar di citrus
    Registrato dal
    Feb 2002
    Messaggi
    774
    ciao, scusate per l'assenza.. ma un po' di vacanze me le ero meritate :P
    dunque....

    ok, per quanto riguarda le connessioni il discorso è chiaro, non è possibile memorizzarle così come sono in varibili di sessione....
    ma quello che cerco di fare io è leggermente diverso...
    io vorrei memorizzare in una variabile di sessione il riferimento all'istanza di una classe.....
    che poi questa classe gestisca la connessione oppure altro a questo punto non è importante no?
    l'importante è che sia possibile istanziarla una sola volta e poi utilizzarne i metodi in tutte le pagine dell'applicazione richiamandoli tramite la sessione appunto....
    è possibile secondo voi?

    un altra cosa:
    rimane il problema di rilevare il termine di una sessione utente in modo da distruggere l'istanza della classe (che ripeto non deve per forza gestire una connessione ma anche altro)...
    se io volessi ad esempio raccogliere informazioni sulla navigazione di un utente (le pagine che visita, quante volte le visita ecc) e poi volessi memorizzarle nel database e ditruggere l'oggetto nel momento in cui l'utente esce dal mio sito (ovvero quando la sessione finisce)... come posso fare????

    grazie di nuovo
    citrus

  8. #8
    Puoi memorizzare oggetti nelle sessioni senza problemi, purchè in tutte le pagine in cui richiami l'oggetto da sessione sia inclusa la definizione della classe a cui l'oggetto appartiene.

    Però questi oggetti non possono contenere in una loro proprietà il resource che rappresenta la connessione, dovrai chiamare ogni volta il metodo connect (o come lo chiamerai).

    E' impossibile, quale che sia il linguaggio che usi, determinare cone sattezza il termine di una sessione di navigazione, puoi solo supporre dopo un tot di inattività che l'utente se ne sia andato.
    Quindi se l'utente torna dopo che quel tot è scaduto consideri la sessione terminata.
    Did efault le sessioni in PHP scadono dopo 20 minuti di inattività (vedi php.ini), ma puoi modificare questo valore o crearti un tuo sistema di scadenze
    per favore NIENTE PVT TECNICI da sconosciuti

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.