Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Configurazioni generali

Prime configurazioni da stabilire.
Prime configurazioni da stabilire.
Link copiato negli appunti

Passiamo alla descrizione della Chat: esteticamente è molto semplice, sia per gli utenti che la utilizzano, sia per la gestione da parte del server. Come potete vedere dall'immagine la chat è predisposta in un pop-up e le finestre che mostrano la discussione e i nomi degli utenti sono degli iframes. Premesso questo possiamo passare subito a realizzare la pagina del Login dove avverrà l'accesso degli utenti.

Login.aspx
Chat

Create una semplice pagina con all'interno una tabella con 2 inputText e un bottone. Attenzione però questi controlli non sono semplici controlli html bensì controlli ASP.NET quindi per i due input usate questo codice:

<asp:textbox id="Nick" Width="100" Runat="server">
</asp:textbox>

e

<asp:textbox id="Password" Width="100" Runat="server" TextMode="Password">
</asp:textbox>

per il bottone usate:

<asp:Button Text="Entra" Runat="server" ID="Button1" NAME="Button1" BackColor="#DCB4D6" ForeColor="Black" BorderColor="Black" BorderWidth="1px" BorderStyle="Solid" Font-Bold="True" OnClick="Submit" />

Inoltre aggiungete sopra la tabella un label di testo:

<asp:Label ID="labelMs" Runat="server"></asp:Label>

Questo ultimo servirà per mostrare eventuali avvisi all'utente
nel caso si cerca di entrare con un Nick già in uso o se la password
immessa è sbagliata... Riscordate di inserire la tabella all'interno
dei tag

<form id="Form1" runat="server"> e </form>

Passando all'aspetto della funzione della pagina login.aspx aprite il codice html con un editor ed inserite la seguente riga all'inizio della pagina:
<%@ Page Language="VB" %>

questa riga indica al server di processare una pagina ASP.NET. Subito dopo inserite lo script vero e proprio, con il quale controlleremo i dati immessi dall'utente che cerca di accedere alla chat e soprattutto impedire l'accesso ad un utente che vuole entrare con un nick già utilizzato da un altro utente. Qui vengono utilizzati gli oggetti Session per controllare se un utente abbia già avuto accesso alla chat; faccio notare che la durata degli oggetti Session è predisposta a scadere entro 1 minuto come si può vedere dalla riga Session.TimeOut = 1 verso la fine dello script. La routine che viene processata inprimis alla lettura della pagina è Page_Load. Esaminiamo il codice:

<script runat="server">
sub Page_Load(obj as object, e as EventArgs)

Si imposta il label in modo che non contenga alcun testo e si controlla se l'utente abbia cercato di accedere alla chat senza effettuare il login, in tal caso si sarebbe venuta a creare la Session("Indietro") che ci informa appunto di questo, e la possiamo utilizzare per informare l'utente. La Session("Mea") ci informa se ha già avuto accesso, e cerca di rientrare in chat, quindi il suo nick può essere ancora registrato sul server.

labelMs.Text = ""
if Session("Mea") then
labelMs.Text = "Hai già avuto accesso alla chat, comunque ora per accedere
nuovamente esegui il Login"
Session("Mea") = False
end if
''''''' controlla se ha cercato di accedere senza login
if Session("Indietro") then
labelMs.Text = "Devi accedere tramite login, inserisci un Nick a scelta e la
password corretta"
Session("Indietro") = False
end if
if Session("Nick") <> "" then
if IsArray(Application("Nick")) then
Application.Lock()
Application("Nick")(Session("ID")) = ""
Application.UnLock()
end if
Session("Nick") = ""
Session("ID") = ""
Session("Righe") = ""
end if
end sub

Qui termina la sub Page_Load e si creano le variabili che saranno utilizzate dalla subroutine chiamata dall'evento Submit del bottone

Dim iLoop, AggiungiNumero as Integer
Dim ErroreNick as String
Dim varBo as Boolean = False
Dim varTuttoOk as Boolean = False
Dim ArrNick(30) as String '31 E' IL NUMERO MASSIMO DI UTENTI
Dim ArrNow(30) as String
dim varFai as Boolean
sub Submit(obj as object, e as EventArgs)
Dim ii As Integer
Dim olda, oraa As Date
oraa = Now()

Fate attenzione a questo codice particolarmente importante. Considera un aspetto fondamentale all'interno della chat ovvero lo stato degli utenti. In Application("Nick") sono contenuti sottoforma di Array tutti i Nick degli utenti, in Application("Now"), ancora un array, alla stessa posizione di quello utente abbiamo il suo stato: il Refresh della iFrame utenti.aspx, ri-processa lo script della pagina, e ad ogni chiamata, viene aggiornato il valore di data all'interno dell'array. Se l'utente non è più online non sarà possibile ri-aggiornare la variabile con l'orario corrente e quindi quell'Array conterrà un vecchio valore data che permetterà la cancellazione di quel Nick all'interno della lista degli utenti; al refresh della pagina ogni utente viene controllato e chi ha nella propria posizione dell'Application("Now") una data minore agli otto secondi di quella attuale è da considerarsi online, in caso contrario si provvede alla cancellazione di quello utente. Per ottenere una maggiore precisione anche qui dalla pagina login mentre un utente cerca di accedere alla chat si ripete questo controllo, soprattutto se in chat non è rimasto più nessuno e quindi non è possibile accedere alla pagina utenti.aspx. In questo modo si evita che l'utente che entra in chat possa trovare nella lista utenti che in realtà hanno abbandonato da diverso tempo la chat. Quindi si fa un controllo per vedere se ci sono Array Nick con argomenti vuoti in tal caso alla rispettiva posizione dell' array Now viene salvata una data molto vecchia così si è sicuri che quella posizione venga svuotata dalla pagina utenti.aspx.

If IsArray(Application("Nick")) Then
If IsArray(Application("Now")) Then
Application.Lock()
For ii = LBound(Application("Now")) To UBound(Application("Now"))
If Application("Nick")(ii) <> "" Then
olda = Application("Now")(ii)
If DateDiff("s", olda, oraa) > 8 Then
Application("Nick")(ii) = ""
Application("Now")(ii) = CDate("26/09/00 17.45.14")
End If
End If
Next
Application.UnLock()
End If
end if

Non preoccupatevi della funzione del codice su riportato avrete modo, considerando il codice delle seguenti pagine, di capire meglio come funziona. Ritornando alla subroutine Submit ora viene controllata la password, in questo caso è meachat, ma siete liberi di cambiarla come volete o di eliminarla se permettete di accedere al sito a chiunque.

If Password.Text = "meachat" then
'OK
varBo = True
else
'BAD
varBo = False
If Password.Text = "" then
ErroreNick = "Devi inserire la password<BR>"
labelMs.Text = labelMs.Text & ErroreNick
Else
ErroreNick = "La password è errata<BR>"
labelMs.Text = labelMs.Text & ErroreNick
End If
end if

Di seguito si controlla la formattazione del Nick, si evita anche di far inserire caratteri chiave del VisualBasic Script come " < & :

If Len(Nick.Text) > 16 then
ErroreNick = "Il Nick è troppo grande<BR>"
labelMs.Text = labelMs.Text & ErroreNick
varBo = False
elseif Len(Nick.Text) < 3
ErroreNick = "Devi inserire un Nick di almeno 3 caratteri<BR>"
labelMs.Text = labelMs.Text & ErroreNick
varBo = False
end if
If (Instr(Nick.Text, ";") <> 0) OR (Instr(Nick.Text,
"=") <> 0) OR (Instr(Nick.Text, "&") <>
0) then
ErroreNick = "Non sono consentiti caratteri speciali<BR>"
labelMs.Text = labelMs.Text & ErroreNick
varBo = False
end if
If IsArray(Application("Nick")) then
ArrNick = Application("Nick")
For iLoop = LBound(ArrNick) to UBound(ArrNick)
If (StrComp(ArrNick(iLoop), Nick.Text, vbTextCompare) = 0) then
ErroreNick = "Esiste già un altro utente con questo Nick,
scegline un altro<BR>"
labelMs.Text = labelMs.Text & ErroreNick
varBo = False
Exit For
end if
Next
end If
Dim MaxUtenti as Integer
MaxUtenti = Application("NumeroUtenti")
If MaxUtenti = 30 then '''cioe 31
varBo = False
ErroreNick = "Si è già raggiunto il numero massimo
di utenti<BR>"
labelMs.Text = labelMs.Text & ErroreNick
end if

Qui di seguito i commenti delle righe più importanti sono posizionati accanto (ricordo che in ASP i commenti sono permessi dal carattere ' apostrofo quindi tutto ciò che si trova a destra di questo carattere non è considerato codice eseguibile dal server ma eventuale commento del programmatore)

If varBo Then
'L'utente puo accedere alla chat
if IsArray(Application("Nick")) then
dim o as Integer
dim ora, old as Date
ora = Now()
FOR o = lBound(Application("Now")) to UBound(Application("Now"))
old = Application("Now")(o)
if (old = "26/09/00 17.45.14") OR (DateDiff("s",
old, ora) > 8) then
Application.Lock()
AggiungiNumero = Application("NumeroUtenti") '''''''
logicamente quando nella pagina utenti.aspx si riconosce
che l'utente e stato
''''''' piu di 6 sec inattivo si e cancellato il nome in Application("Nick")
e in
''''''' Application("NumeroUtenti") si e sottratto 1
AggiungiNumero = AggiungiNumero + 1 ''''''' Ora entra
un altro e si riaggunge 1
ArrNick = Application("Nick")
Application("NumeroUtenti") = AggiungiNumero
ArrNick(o) = Nick.Text
Application("Nick") = ArrNick ''''''' Si inserisce
nell'array esistente ma di un utente
scaduto
Session("ID") = o
ArrNow = Application("Now")
ArrNow(o) = Now()
Application("Now") = ArrNow
Session("Nick") = Nick.Text ''''''' Si salva
anche nel session
varTuttoOk = True
Application.Unlock()
varFai = False
exit For ''''''' Salvato il tutto si esce subito!!
else
varFai = True
end if
NEXT

Se tutto è ok la variabile booleana varFai sarà True, si salva nell'Application("NumeroUtenti") il numero degli utenti online più il nuovo utente, in Application("Nick") il Nick del nuovo utente e in Application("Now") la data attuale compresa di secondi:

if varFai then
Application.Lock()
AggiungiNumero = Application("NumeroUtenti")
AggiungiNumero = AggiungiNumero + 1
Session("ID") = AggiungiNumero
Application("NumeroUtenti") = AggiungiNumero
ArrNick = Application("Nick")
ArrNick(AggiungiNumero) = Nick.Text
Session("Nick") = Nick.Text
ArrNow = Application("Now")
ArrNow(AggiungiNumero) = Now()
Application("Nick") = ArrNick
Application("Now") = ArrNow
Application.Unlock()
varTuttoOk = True
end if
else
Application.Lock()
Session("ID") = 0
Application("NumeroUtenti") = 0
ArrNick(0) = Nick.Text
ArrNow(0) = Now()
Application("Now") = ArrNow
Session("Nick") = Nick.Text
Application("Nick") = ArrNick
varTuttoOk = True
Application.Unlock()
end if
End if

Alla fine se varTuttoOk è True si entra in chat:

if varTuttoOk then
Session.Timeout = 1
Session("Autentificazione") = True
Response.Redirect("mea.aspx")
end if
end sub
</script>

Ti consigliamo anche