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

Discussione: Utenti online

  1. #1

    Utenti online

    Probabilmente ci saranno già centomila thread su questo argomento, ma devo aprirne un'altro perchè nel mio caso è più particolare.
    Gli utenti che ho online, per cominciare, sono inscatolati in Session, e perciò vorrei uno script che, quando l'utente si scollega, lo tolga subito dalla lista.
    Ma la cosa più complessa è un'altra: vorrei fare in modo di mettere qualcosa che inscatoli in continuazione il titolo della pagina in cui l'utente è. Il perchè? Per metterlo nella lista online, accanto al nome dell'utente, per farlo intendere come luogo.
    Com'è possibile ciò?
    S W I N U B

  2. #2
    Prova a fare così:
    Nel db, nella tabella utenti metti due campi in più:
    data_ultima_operazione - data/ora
    id_pagina_visitata - numerico

    A questo punto definisci un tempo limite massimo per dire che l'utente è ancora online (ad esempio 10 minuti), ovvero, superato il tempo limite l'utente viene considerato offline, anche se egli sul suo browser sta ancora visualizzando una pagina del tuo sito.

    Come ben sai il web non ha stato e quindi non è possibile in alcun modo definire se un utente è connesso ad una pagina oppure no, in quanto, la connessione tra l'utente e il server avviene solo per quel lasso di tempo in cui avviene la richiesta della pagina (dal client al server) e l'invio della stessa (dal server al client), a meno che non si usino speciali programmini (applet, swf) che in background inviano un "segnale di presenza" al server (ad esempio ogni 60 secondi - troppo stressante per il server...) in modo che venga aggiornata la lista degli utenti online.

    Ad ogni modo, fatti quei due campi nella tabella utenti e definito un tempo limite di online, fai si che ogni volta che l'utente clicca su qualcosa, il campo "data_ultima_operazione" viene aggiornato con la data e l'ora attuale, mentre il campo "id_pagina_visitata" memorizzerà l'id della pagina che si sta vedendo in quel momento (vedi questo forum ad esempio, ogni forum ha un suo id).
    Per costruire la lista degli utenti connessi, fai un select sulla tabella utenti e prendi tutti quelli la cui data_ultima_operazione sia superiore alla data/ora attuale meno dieci minuti:
    codice:
    "... WHERE data_ultima_operazione > #" & dataAdd("n", -10, Now()) & "# ..."
    Per dire invece in quale pagina sta un determinato utente, basta leggere l'id_pagina_visitata e fare una query sulla tabella che lista le pagine (o le categorie).

    Se l'utente clicca su LOGOUT fi una update della data_ultima_operazione facendola diventare pari alla data/ora attuale - 10 minuti.

  3. #3
    Ottima idea la provo subito
    S W I N U B

  4. #4
    ma perchè a:

    codice:
    'INIZIO ONLINE
    
    us = Session("username")
    Set Conn = Server.CreateObject("ADODB.Connection") 
    Conn.open "driver={Microsoft Access Driver (*.mdb)};dbq=" & server.mappath("../../mdb-database/hog.mdb") 
    data = Time()
    
    strSQL = "UPDATE info SET ultima_move = "&data&" WHERE username = " & us& ""
    
    Conn.Execute strSQL
    
    If err > 0 then 
    response.write "<font='Verdana' size='2'>Spiacente,deve esserci stato un errore...torna indietro e riprova!</font>" 
    Else 
    response.write "<font='Verdana' size='2'>Modifica effettuata con successo.</font>"
    end if
    
    conn.close 
    set conn=Nothing
    
    'FINE ONLINE
    dà:

    codice:
    Microsoft OLE DB Provider for ODBC Drivers error '80040e14' 
    
    [Microsoft][ODBC Microsoft Access Driver] Syntax error (missing operator) in query expression '&data&'. 
    
    /public/hogwarts/protect-ok.asp, line 20
    S W I N U B

  5. #5
    Moderatore di ASP e MS Server L'avatar di Roby_72
    Registrato dal
    Aug 2001
    Messaggi
    19,563
    Guarda Mems come ha messo la data nel db...

    Roby

  6. #6
    Prova così:

    codice:
    'INIZIO ONLINE
    
    us = Session("username")
    Set Conn = Server.CreateObject("ADODB.Connection") 
    Conn.open "driver={Microsoft Access Driver (*.mdb)};dbq=" & server.mappath("../../mdb-database/hog.mdb") 
    data = Time()
    
    strSQL = "UPDATE info SET ultima_move = #"& data & "# WHERE username = " & us& ""
    
    Conn.Execute strSQL
    
    If err > 0 then 
    response.write "<font='Verdana' size='2'>Spiacente,deve esserci stato un errore...torna indietro e riprova!</font>" 
    Else 
    response.write "<font='Verdana' size='2'>Modifica effettuata con successo.</font>"
    end if
    
    conn.close 
    set conn=Nothing
    
    'FINE ONLINE
    La parte in grassetto...
    Provare paura per un qualcosa che ti possa capitare nel futuro non ti evita quell'evento,ti fa soltanto vivere un presente sbagliato!

  7. #7
    Adesso è cambiato, dà:
    codice:
    Microsoft OLE DB Provider for ODBC Drivers error '80040e10' 
    
    [Microsoft][ODBC Microsoft Access Driver] Too few parameters. Expected 1. 
    
    /public/hogwarts/protect-ok.asp, line 20
    S W I N U B

  8. #8
    Utente di HTML.it L'avatar di Sypher
    Registrato dal
    Jun 2003
    Messaggi
    1,994
    Così?
    codice:
    strSQL = "UPDATE info SET ultima_move = #"& data & "# WHERE username ='" & us & "'"
    Se non funzica controlla se us gli arriva valorizzato!
    La passera non dura perchè Sypher la cattura!

    "No one like us we don't care, we are millwall, super millwall, we are millwall from the DEN"

  9. #9
    Funziona.
    Ora sto facendo la Select sul modello di quella di Mems così:

    codice:
    <% 
    Set Conn = Server.CreateObject("ADODB.Connection") 
    Conn.open "driver={Microsoft Access Driver (*.mdb)};dbq=" & server.mappath("../../mdb-database/hog.mdb") 
    
    Set objRs = Server.CreateObject("ADODB.Recordset")
    set objRs = Conn.Execute("SELECT * from info order by nome_pg ASC WHERE ultima_move > #" & dataAdd("n", -10, Time()) & "# ..."")
    
    Do while NOT objRs.EOF 
    
    response.write "<table width='600' border='1' cellspacing='0' cellpadding='1' bordercolor='#000000'><tr> "
    response.write "<td width='300'><font face='Verdana' size='1'>" & objRs ("nome_pg") & " " & objRs ("cgnm_pg") & "</font></td>"
    response.write "<td width='300'><font face='Verdana' size='1'>" & objRs ("Data") & "</font></td>" 
    response.write "</tr></table><hr>" 
    objRs.Movenext 
    Loop 
    objRs.Close 
    Set objRs=Nothing 
    %>
    Però dice:

    codice:
    Microsoft VBScript runtime error '800a000d' 
    
    Type mismatch: 'dataAdd' 
    
    /public/hogwarts/online1.asp, line 15
    S W I N U B

  10. #10

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 © 2024 vBulletin Solutions, Inc. All rights reserved.