Gå til innhold

Unique hit counter med JSP og MySQL


Anbefalte innlegg

Videoannonse
Annonse

Disclaimer:

Jeg har aldri programmert JSP, så denne teller kun for PHP, men det bør være mye det samme.

 

I PHP har man det som kalles SESSIONS. Det er et slags array hvor du kan lagre alt, så blir det lagret på serveren for den brukeren spesielt.

 

Hvis du finner ut hva JSP bruker, sjekker du bare om et session allerede eksisterer, gjør det ikke det, inkrementerer du et felt i databasen din. Eksisterer det allerede, dropper du det.

 

Databasen din trenger egentlig bare inneholde ett felt, en integer hits.

 

En session i PHP forsvinner vanligvis når man lukker nettleseren, etter 20 minutter med idling eller hvis du går inn og eksplisitt sletter autentiserte sesjoner.

Lenke til kommentar

Nå vil jeg få legge til at denne registrerer unike sesjoner, som er det man vanligvis vil ha. Vil du derimot registrere unike besøk fra unike IP-adresser, må du jo lage et felt i en database for IP-adresser, og gjøre det samme som fortalt over, men også sjekke om IP-adressen eksisterer fra før.

 

Et tredje alternativ er å registrere unike sesjoner per unike IP-adresser, som vil være en fin blanding, og du vil kunne få både unike besøkere (feilaktig basert på IP-adresser, ettersom en fylkeskommune kan ha ganske mange folk på samme IP-adresse) og unike treff (ved å legge sammen alle IP-adressers unike sesjoner).

Lenke til kommentar

Jeg er ganske ny innen JSP og PHP har jeg aldri prøvd. Takker for svaret, men vet ikke hvor mye det hjalp meg. Skjønner at session er noe som lagrer info om brukeren som er tilkoblet siden min, blant annet ip-adresse.

 

Ved å søke litt rundt på nettet fant jeg at det også i JSP finnes noe som heter session, men vet ikke om det er det samme som i PHP. Har funnet noen eksempler kode, men det innebærer at brukeren må fylle ut et skjema før at opplysningene skal bli registrerte.

 

Er det noen som kan fortelle meg hva jeg skal gjøre i JSP for å få det til, evt. gi meg litt kode å se

Lenke til kommentar

Session fungerer på samme måte i begge språk. Det er rett og slett en datastruktur som er (så godt som mulig) unik for hver klient som henvender seg til serveren. Man kan i utgangspunktet putte hva som helst inn i denne datastrukturen, som typisk er et map/assosiativ array.

 

Jeg kan ikke JSP selv, så der kan jeg ikke hjelpe deg.

Lenke til kommentar

Her en er simpel en..

<%@page import="java.sql.PreparedStatement"%>
<%@page import="java.sql.ResultSet"%>
<%@page import="java.sql.Statement"%>
<%@page import="java.sql.Connection"%>
<%@page import="java.sql.DriverManager"%>

<%
//Mega _simple_ hit counter.
//(Does not scale, is not robust, only supports one counter.)

//Count unique number of users accessing this page.
String alreadyCounted = (String)session.getAttribute("alreadyCounted");
if (alreadyCounted == null) {

//Database script
//create database hitcounter;
//create table hits (count integer);
//insert into hits values(1);

//Read, increment and update hit counter.
Class.forName("com.mysql.jdbc.Driver");
String url = "jdbc:mysql://localhost/hitcounter";
String username = "root";
String password = "";
Connection connection = DriverManager.getConnection(url, username, password);
Statement statement = connection.createStatement();	
ResultSet resultSet = statement.executeQuery("select * from hits");
resultSet.next();
int count = resultSet.getInt(1);
count++;
resultSet.close();
statement.close();
PreparedStatement preparedStatement = connection.prepareStatement("update hits set count = ?");
preparedStatement.setInt(1, count);
preparedStatement.executeUpdate();
System.out.println("Current hits are: " + count);
preparedStatement.close();
connection.close();

//Mark this session as counted
session.setAttribute("alreadyCounted", "You've been counted");
}

%>

Endret av w3edr5t
Lenke til kommentar
  • 1 måned senere...

Ok. Takker for alle svar. Jeg la saken litt på is, men nå har jeg lånt meg en bok om JSP. Tarrarattataaa!

Så nå har jeg funnet ut at det er noe som heter sessions også i java og jeg tror jeg har sånn noenlunde peiling på hva jeg skal gjøre. Problemet nå er hva jeg faktisk skal telle. Som drange var inne på kunne jeg telle ip-adresser, sessioner eller en blanding(som jeg ikke helt skjønte hvordan skulle bli). Hva er vanligst? Telle sessioner? I så fall, hva er normalt et tidsintervall for en session?

Lenke til kommentar

Problemet med å telle antall sessions er at brukerne kan lukke nettleseren, åpne den igjen og gå inn på siden på ny. Da vil man få en ny session, og dermed registrert som en ny unik bruker...

 

Problemet med å telle unike IP-adresser er at det er veldig enkelt å forny sin ip-adresse. Alle som kobler opp via modem/isdn får ny IP for hver pålogging, mens vi som sitter på ADSL gjerne beholder IP-adressen noe lengre. Men det skal ikke mer til enn restart av router for å fornye sin IP... (Med mindre man sitter på fast IP - noe de færreste privatpersoner her til lands gjør.)

 

Du kan jo også opprette cookies som sådan telles. En cookie lagres på brukerens maskin. En slik cookie er latterlig lett å fjerne, sådet er enkelt å bli telt flere ganger på den måten også.

 

Så hva er best? Tja, ikke godt å si. En blanding er kanskje ikke så dumt. Altså: sjekk om IP-adressen og Session'en er registrert fra før. Det holder med at en av de matcher for å finne ut at brukeren har vært på nettsiden tidligere. (Med mindre noen har overtatt IP-adressen til en tidligere besøkende)..

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...