Come faccio a tenere traccia del numero di sessioni correnti sul mio sito web?Tieni traccia di chi è sul sito web in questo momento
risposta
Se vuoi solo sapere chi guarda le pagine di un piccolo sito rinky-dink, un modo è quello di avere una lista (o statica) delle ultime richieste, insieme alla data/ora della richiesta . Ogni volta che qualcuno richiede una pagina, rimuovere tutti i "vecchi" hit (più vecchi di X minuti) e aggiungere (o aggiornare) le informazioni del visitatore con una data/ora,
Nota, per un sito molto occupato, questa sarebbe probabilmente una cattiva idea. Una soluzione un po 'più scalabile sarebbe quella di avere una colonna "ultima visita" nella tabella degli utenti e aggiornarla ogni volta che l'utente richiede una pagina. Ma ciò non sarebbe utile per tenere traccia degli utenti anonimi/non registrati.
In entrambi i casi, per vedere chi è "attivo", si passa attraverso i dati e si trovano tutte le visite/utenti con un tempo di ultima visita meno di X minuti fa, dove X è un numero che si ritiene appropriato. 20-60 minuti di solito sono abbastanza buoni.
Un metodo molto semplice è quello di tenere traccia dell'ultima attività da parte di ciascun utente. Dopo un periodo di non attività, dici che quell'utente non è più attivo.
Un modo semplice sarebbe scrivere un piccolo modulo http (o addirittura sfruttare il global.asax) che gestisce quando viene creata la sessione e quando la sessione termina per aggiornare una raccolta o una tabella di database di tutti gli utenti attualmente attivi e quando la sessione termina per rimuovere il record.
RE: Al termine della sessione si dovrebbe comunque avere accesso alla sessione stessa o per lo meno l'identificatore di sessione sia dalla proprietà mittente o la proprietà EventArgs. Questo ti darà un modo semplice per associare una sessione di asp.net a un utente usando l'identificatore di sessione. Puoi testarlo facilmente avviando l'applicazione in debug e nella finestra immediata fai Session.Abandon(); per attivare questo evento a livello di codice per vederlo accadere con codice live che puoi eseguire il debug.
Nota Non sono sicuro al 100% sull'uso del mittente/args ma dovresti essere in grado di accedere alla sessione stessa direttamente all'interno della sessione globale.asaxEnd da solo facendo questa.Sessione che dovrebbe essere ancora disponibile (assicurati di non utilizzare HttpContext.Current.Session perché il contesto non esiste quindi).
Ho provato questo, e non funziona così bene. Quando la sessione termina con un timeout, ottieni l'evento terminato alla fine della sessione, quindi non hai idea di quale sessione sia terminata. –
Una cosa che si potrebbe fare è implementare il proprio SessionStateStoreProvider: http://msdn.microsoft.com/en-us/library/ms178587.aspx
Nell'implementazione di GetItem, si dovrebbe aggiornare la propria collezione di dati di sessione in corso e nell'implementazione RemoveItem, si ha accesso alla ASP Dati di sessione .NET, quindi è possibile rimuovere l'elemento dalla raccolta prima della rimozione della sessione ASP.NET nel solito modo. Puoi interrogare la tua collezione per le sessioni attualmente attive.
alternativa:
Se si utilizza il ASP.NET provider di appartenenze, è possibile interrogare il database con qualcosa sulla falsariga di:
Create Procedure dbo.GetCurrentUsers
@ActiveSince DateTime
AS
SELECT U.UserId, U.UserName, M.Email
FROM aspnet_Users U
INNER JOIN aspnet_membership M ON M.UserId = U.UserId
WHERE U.LastActivityDate > @ActiveSince
GO
Si potrebbe impostare @ActiveSince per essere l'attuale DateTime meno il timeout della sessione sul tuo sito.
var sessionState = (System.Web.Configuration.SessionStateSection)
ConfigurationManager.GetSection("system.web/sessionState");
DateTime activeSince = DateTime.Now.AddMinutes(0 - sessionState.Timeout.TotalMinutes);
Ciò comprende gli utenti che sono andati al tuo sito e poi a sinistra subito, ma non c'è modo di dire se sono ancora lì, a meno che non si dispone di uno script nella pagina che invia regolarmente una chiamata AJAX al server che dice che è ancora aperto. Raccomanderei contro questo dato che aumenterebbe il traffico e sprecherà risorse senza alcun reale guadagno.
Mi occuperei principalmente di Global.asax. Avere Session_Start aggiungere a una lista globale dell'applicazione contenente i dati che si desidera tracciare (ad es. Utente, SessionId, StartTime, LastRequestTime).
Quando un utente raggiunge per la prima volta il sito, Session_Start aggiungerà una voce a GlobalList. Questo sarà sicuro che ogni utente unico ottiene la propria voce (gestire anche noioso). Se lo desideri, una volta che un utente effettua l'accesso, puoi aggiornare GlobalList per impostare le informazioni sull'utente (nome, ID, qualsiasi altra cosa).
Successivamente, Application_Start avvia un thread in background che passa attraverso l'elenco globale e rimuove gli elementi scaduti (in base alla soglia impostata, TimeSpan di LastRequestTime-StartTime).
Se si desidera distribuire questo in uno scenario WebFarm, è necessario spostare l'elenco nel database.
- 1. Tieni traccia del sito di riferimento in entrata tramite link nel file PDF?
- 2. Tieni traccia dei progressi di una `mappa`
- 3. Di chi sono il mio sito? (Programmaticamente)
- 4. Mostra google maps sul sito web mobile
- 5. Integrazione di IMAP sul sito Web php
- 6. Di chi è la responsabilità di limitare le richieste web?
- 7. Tieni traccia di quante volte è stata chiamata una funzione ricorsiva in C++
- 8. XSS Attack sul sito Web ASP.NET
- 9. Trovato sconosciuto index.php sul sito web
- 10. "era inaspettato in questo momento."
- 11. L'URL richiesto/Chi non è stato trovato su questo server
- 12. Comic Sans sul nostro sito web
- 13. È possibile disattivare gli acceleratori IE8 sul mio sito web?
- 14. Disqus SSO integration sul sito web
- 15. Colore predefinito impostato sul sito web gnuplot
- 16. Barra traccia Solo eventi di fuoco sul valore finale in qualsiasi momento.
- 17. Come utilizzare OpenID sul mio sito web
- 18. Incorpora modelli 3D sul sito web
- 19. Tieni traccia delle schede con knockoutjs + twitter bootstrap
- 20. Rinomina ramo sul sito Web github?
- 21. mostra feedback ebay sul mio sito web
- 22. Youtube Iframe sul sito Web HTTPS
- 23. Definizione di impostazione "Sempre attivo" sul sito Web di Azure
- 24. Come posso trovare il numero di visitatori/utenti sul mio sito (IIS7/asp.net) in qualsiasi momento?
- 25. Come impostare machineKey sul sito Web di Azure
- 26. Codifica di un sito Web in C?
- 27. Malware sul sito Web di un cliente - Idee?
- 28. filigrana di testo sul sito web? come farlo?
- 29. Integrazione del calendario di Outlook sul sito Web/Altro
- 30. Installa referrer non traccia sul mercato web Android
Parte di questo dipende dalla definizione di attivo. Potremmo parlare di sessioni numero-corrente, o di accesso durante l'ultimo mese o effettivi contributori-entro l'ultimo-X-giorni. Si prega di fornire un po 'più di informazioni su cosa, esattamente, si vuole misurare. – kbrimington