Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 21

Discussione: garbage collection

  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2001
    Messaggi
    275

    garbage collection

    Salve a tutti
    dopo molte ricerche, non ho capito ancora bene come funziona la garbage collection.
    Inizio le sessioni con
    session_start();
    e ho visto che sul php.ini c'è

    session.gc_maxlifetime=1440 ; after this number of seconds, stored
    ; data will be seen as 'garbage' and
    ; cleaned up by the gc process

    ma in pratica come faccio a fare in modo che dopo questi secondi alcuni dati di alcune tabelle del database diventino spazzatura?
    devo richiamare il session.gc_maxlifetime anche nei miei script?
    Mi serve perchè vorrei che in un carrello, se l'utente rimane "fermo" e alla fine non compra nulla, dopo tot minuti il database si autopulisce.
    Grazie!


  2. #2
    Che significa garbage collection?
    eCommerceRS.NET - Commerciante, vendi on-line!
    Il mio nick è mircov e non mirco!!!

  3. #3

    Re: garbage collection

    Originariamente inviato da mystica
    ma in pratica come faccio a fare in modo che dopo questi secondi alcuni dati di alcune tabelle del database diventino spazzatura?
    devo richiamare il session.gc_maxlifetime anche nei miei script?
    Mi serve perchè vorrei che in un carrello, se l'utente rimane "fermo" e alla fine non compra nulla, dopo tot minuti il database si autopulisce.
    Grazie!
    Ciao,
    la garbage collection delle sessioni (letteralmente "raccolta immondizie") elimina le sessioni marchiate come scadute.
    Le sessioni vengono marchiate come scadute dopo che è trascorso il tempo session.gc_maxlifetime senza che siano state utilizzate.
    La garbage collection però non interviene sempre e automaticamente (controllare ogni file di sessione ogni volta sarebbe un bel overhead) bensì con una probabilità regolabile in session.gc_probability , default 1/100.

    In genere a quelle impostrazioni non si accede da PHP

    1) Puoi regolare quella probabilità al 100% nel php.ini (ma te lo sconsiglio)
    2) oppure puoi salvare le sessioni su db e allora anche se la regoli al 100% non c'è overhead

    3) oppure fai da solo e quando un utente si connette salvi il momento dell'ultimo accesso su db e lo rinnovi ad ogni accesso, se per quell'utente (adesso - ultimo_accesso) > scadenza allora consideri l'utente out e elimini la sua sessione con session_destroy

    Per identificare l'utente nel db puoi usare il suo id di sessione
    per favore NIENTE PVT TECNICI da sconosciuti

  4. #4
    Utente di HTML.it
    Registrato dal
    Oct 2001
    Messaggi
    275
    grazie per la risposta
    si ecco, la terza soluzione è interessante

    3) oppure fai da solo e quando un utente si connette salvi il momento dell'ultimo accesso su db e lo rinnovi ad ogni accesso, se per quell'utente (adesso - ultimo_accesso) > scadenza allora consideri l'utente out e elimini la sua sessione con session_destroy

    ok, salvo il momento del primo accesso con un INSERT session_id
    ma poi come faccio a rinnovare a ogni accesso e a salvare l'ultimo?
    e come si imposta la variabile $scadenza ?
    mi faresti qlc esempio pratico plz?
    grazie!

  5. #5
    Utente di HTML.it
    Registrato dal
    Oct 2001
    Messaggi
    275
    ah, dimenticavo... potrei anche far scadere la sessione alla chiusura del browser giusto? in questo caso dovrei scrivere
    if (chiudo browser) session_destroy()
    ma come si scrive?

  6. #6
    Utente di HTML.it
    Registrato dal
    Oct 2001
    Messaggi
    275
    per aggiornare la session_id posso mettere un UPDATE nel file config?
    un aiutino?

  7. #7
    Utente di HTML.it
    Registrato dal
    Oct 2001
    Messaggi
    275
    ok, ho cercato e ora ho due campi timestamp:
    data_last_update e data_insert che inserisco con now()
    quando faccio gli insert desgli articoli tutto ok, ogni volta l'update si autoaggiorna. Ma l'update devo comunque farlo su ogni pagina del sito?
    devo mettere un if session_id (dell'utente) esiste
    update data_last_update
    ?

  8. #8
    Originariamente inviato da mystica
    ok, ho cercato e ora ho due campi timestamp:
    data_last_update e data_insert che inserisco con now()
    quando faccio gli insert desgli articoli tutto ok, ogni volta l'update si autoaggiorna. Ma l'update devo comunque farlo su ogni pagina del sito?
    devo mettere un if session_id (dell'utente) esiste
    update data_last_update
    ?
    Se vuoi aggiornare un record con il timestamp, ricorda che se non modifichi nulla il timestamp non viene giustamente aggiornato. In solido un UPDATE tabella set campo = campo il timestamp non si modifica.

    If session_id esiste, non serve. Piuttosto devi verificare che la sessione sia la stessa della precedente, poiche' session_start() se non trova o e' scaduta la precedente, assegna un nuovo session_id.


    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  9. #9
    Utente di HTML.it
    Registrato dal
    Oct 2001
    Messaggi
    275
    ah ecco,
    ma quindi mi consigli di metterli entrambi come DATETIME?
    e la session_id scade automaticamente?
    la mia sessione si chiama $_SESSION['prodotti']
    quindi devo mettere if isset sessione prodotti giusto?

  10. #10
    Originariamente inviato da mystica
    ah ecco,
    ma quindi mi consigli di metterli entrambi come DATETIME?
    e la session_id scade automaticamente?
    la mia sessione si chiama $_SESSION['prodotti']
    quindi devo mettere if isset sessione prodotti giusto?
    Detto cosi' mi pare una valanga inaspettata....

    Non ho chiaro tutto il tuo discorso. La sessione scade lato client quando si chiude il browser (si fuma il cookie di sessione) oppure lato SERVER al raggiungimento del time out di non operativita'. Ci sono alcuni settaggi in php.ini.

    Per quanto riguarda la tua sessione in corso, verificherei prima di tutto al passaggio in una nuova pagina se la sessione recuperata da session_start corrisponda a quella lasciata. Perche'? per evitare che qualcuno punti direttamente da URL a questa nuova pagina dopo aver chiuso il browser. Gli verrebbe assegnata una nuova sessione.

    pag1
    session_start();
    $_SESSION['id_session'] = session_id();

    pag successiva
    session_start();
    if(isset($_SESSION['id_session']) AND $_SESSION['id_session'] == session_id()) ok
    else vai alla prima pagina.

    Puo' essere considerato un eccesso di prudenza, ma per me ci sta tutto.

    Nel db puoi lasciare il timestamp. I casi sono due o mette qualcosa o mette nulla. Se mette aggiorni il timestamp, magari contando i pezzi inseriti ( update tabella set conta = conta +1) in questo modo il tempo viene aggiornato. Bisognerebbe anche considerare come sono la/le tabelle che usi.

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

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.