• Regolamento Macrocategoria DEV
    Prima di aprire un topic nella Macrocategoria DEV, è bene leggerne il suo regolamento. Sei un'azienda o un hosting/provider? Qui sono anche contenute informazioni per collaborare con Sciax2 ed ottenere l'accredito nella nostra community!

Guida Vb.net & PHP - UserCounter | Secure | UserAgent Filter | Noob Friendly !

Garu

Utente Attivo
Autore del topic
9 Ottobre 2011
412
0
Miglior risposta
0
Come aggiungere ai vostri programmi un contatore di utenti (online)

In questa breve e semplice guida spiegherò come aggiungere in maniera molto semplice (Certo ho fatto tutto io :emoji_relieved:) un contatore di utenza nei vostri programmi .net

PHP create un file chiamato user count in formato php e inserite al suo interno:

<?php






function agent($browser) {
$useragent = $_SERVER['HTTP_USER_AGENT'];
return strstr($useragent,$browser);
}




if(agent("UserCounterAgent") != FALSE) {




//$Add = addslashes($_GET["add"]); //Parametro add




$Add = $_POST['add'];








$file = fopen("UserCount.txt","a+"); //a+ lettura e scrittura




$UserCount = fgets($file); //Il numero di utenti è uguale al contenuto del




fclose($file); //Chiude








$file2 = fopen("UserCount.txt","w+"); //w+ lettura e scrittura












if ($Add == 1){ //Se add è = ad 1




$UserCount++; // Incrementa il numero utenti
echo "Aggiunto!";




}elseif ($Add == 0){ //Altrimenti




$UserCount--;//Decrementa il numero utenti




echo "Rimosso!";}


elseif ($Add == 2){


$UserCount = 0;


echo "Resettato!";


}








fwrite($file2, $UserCount); //Scrive il numero utenti del file
fclose($file2); //Chiude




}


else


{echo("Bad UserAgent");}


?>
è consigliabile cambiare l'user agent di default

Caricatelo via ftp in un vostro spazio web assieme ad un altro chiamato UserCount però con estensione txt e come testo scriveteci uno zero ( 0 )

Andate nel vostro programma in vb.net e create una nuova classe, chiamatela come volete cancellate tutto e inseriteci:


Imports System.Net
Imports System.IO
Imports System.Text


Public Class UserCounter


Private _UserCounterUrl As String


Private _UserNumberUrl As String


Private _UserAgent As String


Private _DirectLink As String


Private WithEvents _OwnerForm As Form


Public Event Update()


Public Event Load()
Private Sub AddOnOpen() Handles _OwnerForm.Load
Send(CommandType.Add)
End Sub


Private Sub RemoveOnClose() Handles _OwnerForm.FormClosing
Send(CommandType.Remove)
End Sub




Public Sub New(ByVal UserCounterUrl As String, ByVal UserNumberUrl As String, ByVal UserAgent As String, ByVal OwnerForm As Form)


_UserCounterUrl = UserCounterUrl
_UserNumberUrl = UserNumberUrl
_UserAgent = UserAgent
_OwnerForm = OwnerForm
RaiseEvent Load()
End Sub


Private Sub SendData(ByVal Add As Integer)


Dim request As HttpWebRequest = CType(WebRequest.Create(_UserCounterUrl), HttpWebRequest)
request.UserAgent = _UserAgent
request.Method = "Post"
request.ContentType = "application/x-www-form-urlencoded"
Dim Post As String = ("add=" & Add)
Dim byteArray() As Byte = Encoding.UTF8.GetBytes(Post)
request.ContentLength = byteArray.Length
Dim DataStream As Stream = request.GetRequestStream()
DataStream.Write(byteArray, 0, byteArray.Length)
DataStream.Close()
Dim Response As HttpWebResponse = request.GetResponse()
DataStream = Response.GetResponseStream()
Dim reader As New StreamReader(DataStream)
Dim ServerResponse As String = reader.ReadToEnd()
reader.Close()
DataStream.Close()


Response.Close()




If ServerResponse.ToString.Contains("Aggiunto!") Then


ElseIf ServerResponse.ToString.Contains("Rimosso!") Then


ElseIf ServerResponse.ToString.Contains("Bad UserAgent") Then
MsgBox("User agent errato!")
End If






End Sub
Dim WC As New Net.WebClient
Public Function GetUserNumber()
Return WC.DownloadString(_UserNumberUrl)
RaiseEvent Update()
End Function


Public Sub Send(ByVal C As CommandType)


If C = CommandType.Add Then
SendData(1)
ElseIf C = CommandType.Remove Then
SendData(0)
ElseIf C = CommandType.Reset Then
SendData(2)
End If




End Sub


End Class
Public Enum CommandType
Add
Remove
Reset
End Enum


A questo punto inizializzate un nuovo oggetto (Nuovo UserCounter) nella vostra classe principale (Form1 di default) in questo modo:
Dim UserCounter As New UserCounter("Url/UserCount.php", "Url/UserCount.txt", "UserCounterAgent", FormPrincipale (Me))
Ovviamente modificando le parti in rosso, dove i primi tre parametri sono stringhe, mentre l'ultimo è un form.



A questo punto la classe gestirà automaticamente tutto, aggiungendo e rimuovendo gli utenti al momento dell'apertura e della chiusura del programma,ma non se il programma verrà terminato dal task manager, infatti consiglio periodicamente di azzerare il contatore.

Ricavare il numero utenti (Se dovete eseguire operazioni aritmetiche sarebbe buona norma convertirlo in tipo integer o long)

UserCounter.GetUserNumber()


Altri Comandi utili:



Incrementare di uno il numero utenti:

UserCounter.Send(CommandType.Add)

Decrementare di uno il numero utenti:


UserCounter.Send(CommandType.Remove)

Azzerare il numero utenti:

UserCounter.Send(CommandType.Reset)


Gli eventi


Gli eventi che è possibile utilizzare sono due:

Load () che viene attivato alla fine dell'inizializzazione dell'oggetto

Update Che viene attivato al richiamo della funzione GetUserNumber



Non ho intenzione di dare assistenza se non per problemi tecnici, curiosità e simili, nella guida ho dato tutte le informazioni per permettere ad un utente con una minima conoscenza del linguaggio e delle sue basi.
Se non riuscite a seguire la guida studiate almeno le basi del linguaggio e tornate qui prima di intasare il thread (o i miei messaggi privati) con richieste di aiuto.

 
Ultima modifica:
Riferimento: Vb.net & PHP - UserCounter | Secure | UserAgent Filter | Noob Friendly !

Ottimo abbinamento, ma è un pò una rottura dover appoggiarsi su un programma in vB... Potresti implementarlo in un database
 
Riferimento: Vb.net & PHP - UserCounter | Secure | UserAgent Filter | Noob Friendly !

Ottimo abbinamento, ma è un pò una rottura dover appoggiarsi su un programma in vB... Potresti implementarlo in un database

Non credo di aver capito il senso della tua affermazione, ovvio che devi appoggiarti al programma in vb, è quello che deve tenere il conto degli utenti, e poi un database ? Per cosa, per tenere in memoria un numero dovrei mettermi a creare un database ? Non sarebbe nè efficiente nè utile, oltre che più complicato.
 
Riferimento: Vb.net & PHP - UserCounter | Secure | UserAgent Filter | Noob Friendly !

Non credo di aver capito il senso della tua affermazione, ovvio che devi appoggiarti al programma in vb, è quello che deve tenere il conto degli utenti, e poi un database ? Per cosa, per tenere in memoria un numero dovrei mettermi a creare un database ? Non sarebbe nè efficiente nè utile, oltre che più complicato.

Intendo che sarebbe scomodo dover usare un programma, quando puoi utilizzare un servizio online.
P.S. Non andiamo in flame.
 
Riferimento: Vb.net & PHP - UserCounter | Secure | UserAgent Filter | Noob Friendly !

Bravo bella guida, io di solito metto i web browser nei miei programmi cosi mi faccio molte visite :soso:
 
Riferimento: Vb.net & PHP - UserCounter | Secure | UserAgent Filter | Noob Friendly !

Intendo che sarebbe scomodo dover usare un programma, quando puoi utilizzare un servizio online.
P.S. Non andiamo in flame.

Bravo bella guida, io di solito metto i web browser nei miei programmi cosi mi faccio molte visite :soso:


Ma leggete le discussioni prima di commentarle ? Gli accessi registrati sono quelli al programma non ad un sito web o simili. :facepalm:
 
Riferimento: Vb.net & PHP - UserCounter | Secure | UserAgent Filter | Noob Friendly !

Carino come programma, ma credo che sarebbe molto più sicuro utilizzare un database mysql per salvare il numero di accessi...
 
Ultima modifica da un moderatore:
Riferimento: Vb.net & PHP - UserCounter | Secure | UserAgent Filter | Noob Friendly !

Ma leggete le discussioni prima di commentarle ? Gli accessi registrati sono quelli al programma non ad un sito web o simili. :facepalm:

Inutile quotare me perché non centro. Io ho detto quello che faccio io con i miei programmi. -.- State andando in flame....
 
Riferimento: Vb.net & PHP - UserCounter | Secure | UserAgent Filter | Noob Friendly !

Carino come programma, ma credo che sarebbe molto più sicuro utilizzare un database mysql per salvare il numero di accessi...

Sarebbe fattibile, ma che senso ha? Al limite si può visualizzare il numero utenti, nulla di più.
 
Riferimento: Vb.net & PHP - UserCounter | Secure | UserAgent Filter | Noob Friendly !

Carino come programma, ma credo che sarebbe molto più sicuro utilizzare un database mysql per salvare il numero di accessi...
Già perché naturalmente in mezzo al numero ci troveranno la mia password Altervista...