Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
ASP.NET 1.0/1.1
Session
mercoledì 23 luglio 2003 - 17.07
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
sp
Profilo
| Newbie
30
messaggi | Data Invio:
mer 23 lug 2003 - 17:07
Eccoci alla croce e delizia di ogni sviluppatore asp ed asp.net...
Quello che voglio fare e' avere un elenco dei miei utenti registrati on - line...
ora, come fare? io so se un'utente e' registrato leggendolo dai suoi cookies...
Brainkiller
Profilo
| Guru
7.999
messaggi | Data Invio:
gio 24 lug 2003 - 23:45
Ciao sp,
continua i ... (puntini) tu cosa pensi? Come si potrebbe implementare?
Tu vuoi vedere una lista degli utenti on-line in un particolare momento, giusto?
Diciamo un qualcosa in più rispetto al classico numero di utenti on-line che comunque già in passato non era facile da gestire e quando era gestito forniva dati abbastanza diversi da quello che effettivamente era.
In ASP 3.0 so che si poteva locckare l'applicazione ed incrementare un contatore però poi so che erano nati dei problemi che derivavano dal blocco dell'applicazione. Allo stesso modo si potrebbe usare invece che un contatore una Collection però è difficile capire quando un utente abbandona il sito web, cioè quindi quando scade la sessione....
Hai idee tu?
Ciao
David
sp
Profilo
| Newbie
30
messaggi | Data Invio:
ven 25 lug 2003 - 07:52
Allora, io ti posterei quello che ho fatto e ci si puo' riflettere assieme... Lo sviluppo da me fatto e' prettamente il global.asax:
(io penso che dovresti almeno togliere il wrap da queste textbox, se ci incolli un pochetto di codice non si capisce nulla, cmq proviamo...)
public class Global : System.Web.HttpApplication
{
ArrayList users = new ArrayList();
public Global()
{
InitializeComponent();
}
protected void Application_Start(Object sender, EventArgs e)
{
Application["ConnectedUsers"] = "";
Application["ConnectedUsersCount"] = 0;
Application["ConnectedGuestCount"] = 0;
}
protected void Session_Start(Object sender, EventArgs e)
{
//setta il timeout di default a 5
Session.Timeout = 5;
Application.Lock();
Session["userName"] = "";
Login l = new Login();
// read cookies
if (l.IsUserLogged())
{
string UserName = l.UserName;
Session["userName"] = UserName;
// if user already logged do not count it!
if (Application["ConnectedUsers"].ToString().IndexOf(UserName + "'") < 0)
{
Application["ConnectedUsers"] += UserName + "'";
Application["ConnectedUsersCount"] = (int)Application["ConnectedUsersCount"] + 1;
}
}
else
{
Application["ConnectedGuestCount"] = (int)Application["ConnectedGuestCount"] + 1;
}
Application.UnLock();
}
protected void Application_BeginRequest(Object sender, EventArgs e)
{
}
protected void Application_EndRequest(Object sender, EventArgs e)
{
}
protected void Application_AuthenticateRequest(Object sender, EventArgs e)
{
}
protected void Application_Error(Object sender, EventArgs e)
{
}
protected void Session_End(Object sender, EventArgs e)
{
//quando il visitatore esce (-1)
Application.Lock();
string UserName = Session["userName"].ToString();
if (UserName != "")
{
// if user already logged cancel it
if (Application["ConnectedUsers"].ToString().IndexOf(UserName + "'") >= 0)
{
Application["ConnectedUsers"] = Application["ConnectedUsers"].ToString().Replace(UserName + "'","");
Application["ConnectedUsersCount"] = (int)Application["ConnectedUsersCount"] - 1;
}
}
else
{
Application["ConnectedGuestCount"] = (int)Application["ConnectedGuestCount"] - 1;
}
Application.UnLock();
}
protected void Application_End(Object sender, EventArgs e)
{
}
sp
Profilo
| Newbie
30
messaggi | Data Invio:
ven 25 lug 2003 - 08:04
ArrayList users = new ArrayList
/*
non serve ad una mazza, me ne sono accorto dopo che l'ho postato, pezzo di vecchio codice...
*/
poi la classe Login, legge i cookies per vedere sei sei Loggato o no.
difetti di questo mio codice:
1. Dopo 5 minuti che non navighi sparisci e non riappari + a meno che tu non chiuda il browser.
2. Se ti connetti non Loggato ti aggiunge ai guest e quando ti logghi non ti aggiunge ai Loggati xhe' per lui sei un guest e la tua sessione non e' scaduta.
3. Se mi sconnetto e continuo a navigare dovrebbe cancellarmi dagli utenti e segnarmi tra i guest.
i punti 2 e 3 son oda risolvere all'interno della mia classe Login, ma mi da un errore del cavolo:
"Riferimento a un oggetto non impostato su un'istanza di oggetto."
dalla riga:
HttpContext.Current.Session["userName"] = _UserName;
//_UserName non e' null...
Bene, credo sia tutto...
Se hai tempo e voglia di fare un po' di strada con me in questa selva oscura...
Grazie e ciao
Stefano
Brainkiller
Profilo
| Guru
7.999
messaggi | Data Invio:
mar 29 lug 2003 - 11:02
Come va?
Secondo me però il vero problema è questo.
Tu dici, appena uno si logga puoi aggiungerlo fra gli utenti loggati, appena fa un logoff lo sposti e lo metti nei guest, però poi se lui si disconnette come fai a rimuoverlo dalla lista dei guest?
Questo secondo me è il vero problema, cioè come capisci che la sua sessione è scaduta?
P.S. Hai ragione per il word wrap, grazie di avermelo fatto notare, nella prossima release di Forum ci saranno delle piccole correzioni per cui ci sarà tutto lo spazio dedicato al messaggio senza data e ora a destra e senza nome utente a sinistra che verranno inseriti altrove.
Ciao
David
sp
Profilo
| Newbie
30
messaggi | Data Invio:
mar 29 lug 2003 - 11:20
Cmq se guardi il listato che ho postato, alla session_end del global asax lui capisce che la sessione e'scaduta e lo rimuove dagli ospiti o dagli utenti...
Meglio di cosi' credo si possa fare solo con client side.
Cmq se vuoi vedere sto codice + le modifiche che ho fatto alla classe login in azione collegati a
http://www.mega-pixel.net
che e'il mio primo sito asp.net ed e' stato rilasciato proprio ieri ;-) devo ringraziarti molto per gli aiuti e per la pazienza che hai avuto nell'ascoltarmi...
Ciao e grazie.
Stefano
P.S.
Se vuoi darmi consigli su come potevo fare le cose con questa nuova tecnologia saro' tutto orecchie!
Brainkiller
Profilo
| Guru
7.999
messaggi | Data Invio:
mar 29 lug 2003 - 11:44
Si scusa, hai ragione non avevo visto.
Boh... io ti posso dire però che nella mia vita... ho sempre desiderato implementare una funzionalità di questo tipo su un sito Web ma alla fine ho sempre lasciato perdere un po' per la poca utilità offerta agli utenti, un po' perchè se su un sito visualizzi (1 utente connesso) nessuno viene a vederti! :)
Altri invece addirittura hanno oltre 1000 utenti connessi contemporaneamente su siti modesti e non roba come Microsoft, ed è per questo che ritengo che questi contatori alla fine sparino dati non troppo corretti.
Ho visto il tuo sito, molto carino e rapido. Vedo che è in ASP.NET quindi hai messo in opera lo studio che hai fatto. Complimenti.
Ciao
David
Torna su
Stanze Forum
Elenco Threads
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?
Dopo esserti registrato potrai chiedere
aiuto sul nostro
Forum
oppure aiutare gli altri
Consulta le
Stanze
disponibili.
Registrati ora !