Newsgroup: it.comp.lang.perl
Titolo: un post di tempo fa ...

Salve,
alcune settimane, forse mesi fa, fu postato un messaggio con cui si chiedeva
aiuto per i cookies, utilizzati, in quel caso per un guestbook. Il problema
era: c'e' un metodo alternativo?
Alcuni risposero e rispose anche, se non ricordo male, anche Marco
Cacchiani. Chiunque sia stato, comunque propose un metodo alternativo basato
su IP.
C'e' qualcuno che si ricorda?

 disconnetto.(In modo da togliere la riga dal file di testo)
Partendo dal presupposto che per te 'essere in linea o meno' significa
(immagino) avere il browser aperto su una determinata pagina (chiamiamola
per comodita'
http://www.miosito.it/checkme
 ) io farei cosi', evitando anche di dover
usare i cookies:
1- si fa in modo che se il cgi viene richiamato nudo e crudo
   (cioe' con l'url che ho scritto sopra) questo generi un
   codice utente random da appendere all'url e si limiti
   a richiamare se stesso con il codice utente in coda, cosi':
        <code>
            if (!$ENV{'PATH_INFO'} or $ENV{'PATH_INFO'} eq '/') {
                $codiceutente = generaSessionID();
                # dove generaSessionID() e' una routine che ti
                # scrivi da solo e che fa quello che il suo nome
                # suggerisce
                $oldurl = "http://" . $ENV{'HTTP_HOST'};
                print "Location: http://$oldurl/$codiceutente\n\n;
            }
        </code>
2- Se invece il cgi viene chiamato con la coda (il path_info)
   allora si provvede a:
   2.1- creare/aggiornare un file di log dell'utente con l'ora
        di refresh della pagina:
                <code>
                    if (!-f $codiceutente) {
                        open LOG,">$codiceutente";
                        print LOG idatidellutente();
                        close LOG;
                    }
                    $now = time;
                    utime $now,$now,$codiceutente;
            </code>
    2.2- generare la pagina html, all'interno della quale saranno
         (suppongo) elencati gli utenti online (ove per tali si
         intendono gli utenti che hanno aggiornato il proprio file
         di log non meno di tot secondi fa) e contenente nell'header
         il tag meta:
            <meta http-equiv=Refresh content=totsecondi>
Il tag meta di cui sopra garantisce che la pagina venga ricaricata
(e quindi lo stato di connessione aggiornato) ogni totsecondi.
Il logfile dell'utente puo' contenere sia dati di registrazione (o di
classificazione) relativi all'utente stesso, sia opzioni di sessione
da lui stesso modificabili.
Ovviamente bisognerebbe prevedere anche un qualche meccanismo che,
con una certa calma, provveda a cancellare i logfiles relativi agli
utenti non piu' connessi.
Questo metodo ha anche il vantaggio che se un utente si disconnette,
ma dopo un po' si ripresenta con lo stesso url (lo stesso codiceutente),
il suo stato di connessione viene riattivato.
Non ci dovrebbe essere nemmeno il problema del lock/unlock dei files,
perche' ogni utente ha un file di log separato, e l'accesso in scrittura
ce l'ha solo lui.
Se poi l'area di accesso e' un'area riservata (con accesso
username/password), allora non c'e' nemmeno bisogno del trucco della
generazione del codice casuale per l'identificazione dell'utente.
In questo caso l'utente viene identificato tramite la variabile
$ENV{'REMOTE_USER'} e il logfile stesso puo' essere semplicemente un file
che non muore mai, contenente i parametri di configurazione dell'utente e il
cui access time viene aggiornato ad ogni refresh della pagina.
--
Marco Cacchiani                                
e-mail:ma...@sirius.pisa.it
Public pgp key:         
http://www.sirius.pisa.it/marco/pgp_public_key.asc
Sirius Servizi Informatici                     e-mail: 
in...@sirius.pisa.it
Parco Teatro Pasolini, 1                       Phone:  +39 (50) 865120
I-56019 - Vecchiano                            Fax:    +39 (50) 860260
(Pisa - ITALIA)                                
http://www.sirius.pisa.it/

 Ciao, marco
ti ringrazio,
ciao, fabio