Kjapp og trygg hosting for Wordpress

Et bra loginsystem

Kenneth Dreyer

Well-Known Member
Nå er det veldig lenge siden jeg laget et loginscript, så jeg skal innrømme jeg ikke husker helt hvordan jeg satt det opp med tanke på sikkerhet og brukervennlighet (både for bruker og meg med senere programmering og tilleggsfunksjoner). Jeg er på ferie, så har ingen av mine forrige samples tilgjengelig, og dette er noe jeg må ha ferdig før jeg er hjemme!

Jeg tenkte å sette opp en form, hvor bruker logger inn med epost og passord. Data sendes til login.php. Her kjøres en rekke filter på input-data, for å unngå sql-injection og annet fanteri. Når input er validert, så kjøres en sql query som sjekker om brukernavn og passord eksisterer i databasen. Denne sjekken foretas ved å telle antall linjer på sql resultatet. Her blir da bruker enten validert eller ikke-validert (og sendt tilbake). Om bruker blir validert:

Så lagres det en rekke i databasenavn.online (altså, tabell med navnet 'online'). Denne rekken inneholder brukerid, når bruker sist var aktiv, ip til bruker og browserheader. Bruker får også en session satt i browseren, som forteller at brukeren er innlogget (eks: $_SESSION[innlogget] == true).

Hver gang brukeren trykker på siden, så kjøres en funksjon som sjekker om bruker er online. Denne kryss skjekker opp mot 'online' databasen, samt oppdaterer "sist aktiv" tiden i tabellen.

For å rydde ut uaktive brukere, så kjøres det et script gjennom crontab som rydder opp hvert x minutt.

Gjør jeg det helt feil ved å bruke denne metoden? Blir det for mye? Blir det for lite?
 

vidarlo

Apache-junkie
Joda - ser forsåvidt greit ut det der. Eg har bare brukt mysql_real_escape_string til å rydde dritt fra input, det burde eigentleg holde.

Når det gjelder samtidig online så ville eg bare tatt en tabell over sessions og tidspunkt for siste besøk. På kvar sidevisning kjører du da bare en UPDATE som oppdaterer tidspunkts-kolonna.

For å vise antall brukere online kjører du enkelt og greit en SELECT count(session) AS `antall` FROM `online` WHERE `tidspunkt` >= $unixtimestamp - (antall minutter du skal vise online brukere fra * 60)

Så rensker du opp i den temp-databasen - som forøvrig bør vere av type mem, slik at den ikkje blir lagra ved restart av databaseserver - en gang i døgnet eller noko slikt, sånn at du kan vise antall besøkande per døgn også :)

Det er iaffal mi smørbrødoppskrift.
 
Topp