Uso uno script in merito che appunto popola al login una tabella di utenti_connessi e la cancella, al logout ma anche dopo 15 minuti di inattività dell'utente.
Eccolo:
codice:
<%
'se la sessione è scaduta allora utilizza il cookie per IdUtente e username
IdUtente = Session("Id_utente")
settato = Session("username")
Admin = Session("Flag_admin")
if Admin = "N" then
Admin = "-"
end if
'permette di recuperare l'esatta sezione
'in cui l'utente si trova in un determinato momento
if IdUtente <> "" and settato <> "" then
mappatura = Session("mappatura")
'se la provenienza non è valorizzata
'allora l'utente è sulla Home Page
if mappatura = "" then
mappatura = "home_page"
end if
end if
'response.write(dove)
'Funzione per la trasformazione della data a seconda dell'LCID
'1 parametro la data formato testo o formato data,
'2 nNamedFormat sono i formati data accettati dalla funzione nel motore vbscript FormatDateTime
'3 LCID (i + usati sono 1033 per le date in inglese e 1040 per la data in italiano
Function FormatDateTimeLCID (str, nNamedFormat, nLCID)
dim strRet, nOldLCID
strRet = str
If (nLCID > -1) Then nOldLCID = Session.LCID
On Error Resume Next
If (nLCID > -1) Then Session.LCID = nLCID
If ((nLCID < 0) Or (Session.LCID = nLCID)) Then strRet = FormatDateTime(str, nNamedFormat)
If (nLCID > -1) Then Session.LCID = nOldLCID
FormatDateTimeLCID = strRet
End Function
'apro la connessione
'set connessioneLett = server.createobject("adodb.connection")
'connessioneLett.open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("mdb-database/InterMania.mdb")
'solo se l'utente è loggato eseguo lettura preventiva ed eventualmente insert
if len(IdUtente) > 0 then
sql= "Select * from utenti_connessi where Id_utente_connesso = " & IdUtente
Set objrs = Server.CreateObject("ADODB.Recordset")
objrs.Open sql, objConn
'connessioneLett
if objrs.eof then
sql = "INSERT INTO utenti_connessi(Id_utente_connesso, Utente_connesso, Data_connessione, Amministratore, Mappatura) " &_
"VALUES(" & IdUtente & ", '" & settato & "', Now(), '" & Admin & "', '" & mappatura & "')"
objConn.execute(sql)
'connessioneLett.execute(sql)
end if
objRs.Close
set objrs = nothing
end if
'se lo trova, fa l'update solo se l'utente è loggato
if len(IdUtente) > 0 then
sql = "UPDATE Utenti_connessi set Data_connessione = Now(), " & _
" Mappatura = '" & mappatura & "'" & _
" WHERE Id_utente_connesso = " & IdUtente
objConn.execute(sql)
'connessioneLett.execute(sql)
end if
'cancello l'utente dalla tabella degli utenti connessi (impostando data e ora nel formato corretto)
differenza = dateadd("n", -15, now())
dataInvertitaInglese = FormatDateTimeLCiD(differenza,2,1033)
soloOrario = FormatDateTimeLCiD(differenza,3,1040)
strSQL = "DELETE * FROM Utenti_connessi WHERE Data_connessione < #" & dataInvertitaInglese & " " & soloOrario & "#"
objConn.execute(strSQL)
'connessioneLett.execute(strSQL)
'connessioneLett.close
'set connessioneLett = nothing
%>
E' un esempio adatto alle mie esigenze, ma con qualche ritocco va bene anche per te.
La parte in grassetto è quella che ti esegue la DELETE senza il logout.