cipher Skrevet 26. januar 2004 Del Skrevet 26. januar 2004 (endret) Jeg trenger et greit nok innloggingssystem for admin sider, og har etter mye for og men falt for sessions. Måten jeg holder orden på tilkoblingene er at jeg i hvert dokument har følgende klasse: class user { var $socket; var $userdata = array(); var $loggedin = false; function user() { require "config.php"; session_start(); $socket = mysql_connect($cfg['mysql_hostname'], $cfg['mysql_username'], $cfg['mysql_password']); mysql_select_db($cfg['mysql_database'], $socket) or die(mysql_error()); $result = mysql_query("SELECT * FROM users AS u WHERE u.id='".$_SESSION['id']."' LIMIT 1") or die(mysql_error()); if ((mysql_num_rows($result)) == 1 AND ($_SESSION['ip'] == $_SERVER['REMOTE_ADDR'])) { $this->userdata = mysql_fetch_array($result); $this->loggedin = true; } else { $this->loggedin = false; } } function get($var) { return $this->userdata[$var]; } function IsLoggedIn() { return $this->loggedin; } } Videre lager jeg en instans av klassen: $user = new user(); og sist men ikke minst sjekker om login er gyldig: if ($user->IsLoggedIn() == true) { echo("innlogget"); } else { echo("ikke innlogget"); } Dette systemet fungerer helt fint, men føler at et eller annet er litt klønete. Med det mener jeg sikkerheten rundt det hele. At sessionen kun holder database ID'en f.eks. Noen forslag til hvordan jeg kan forbedre denne generelle innloggingskoden? Da tenker jeg både på ytelse og sikkerhet, samt generell oversikt. Fordelen med systemet slik jeg kjører det i dag er at pga klassen får et oversiktlig og ryddig system som lett kan samkjøres på flere script. Alle konstruktive tanker rundt dette settes pris på, mens spydige kommentarer helst bør utebli EDIT: dette ble stygt formatert Endret 26. januar 2004 av cipher Lenke til kommentar
FuLu Skrevet 26. januar 2004 Del Skrevet 26. januar 2004 Hmm, dette er hele klassen? Kanskje utvide med Login/Logout funksjoner? ->Login(username, password) og ->Logout() Ellers virket det som en kjekk sak å samle dette i en klasse Tror ikke du trenger LIMIT 1 på query, siden du sjekker _num_row == 1 senere. Og om du skulle være så uheldig å ha samme id (om det tillater seg) i db'en oppført 2 ganger, så kan det være lurt å ikke bruke LIMIT 1 her. Da vil nemlig _num_rows == 1 feile. Når det gjelder sikkerhet, så vet jeg ikke hva som er lurest å ha i session. Hittil så har jeg bare vært fornøyd med UserID. IP kan kanskje være en ekstra sikkerhet for å låse session mot en bestemt IP Ser at du lagrer litt "session" data i db'en, mens du bruker php sin session for å få tildelt session id (transparent/cookie), kjekk kombinasjon Lenke til kommentar
cipher Skrevet 26. januar 2004 Forfatter Del Skrevet 26. januar 2004 (endret) poenget med limit 1 og num_rows er jo for å forsikre om at jeg har minst og KUN en person med den ID'en. Er jo spesielt dette med å lagre ID og IP som session data, og så kjøre den der hver gang. Men det blir vel kanskje ikke noe sikrere om jeg gjør brukernavn og passord til session variabler heller så da dette uansett er lagret på serveren? Bør kanskje lage en eller annen form for timeout? Noen forslag om hvordan jeg kan lage en "stay logged in" funksjon foresten? btw alle som vil kan gjerne bruke denne koden til egne prosjekter. Endret 26. januar 2004 av cipher Lenke til kommentar
Getchoo Skrevet 26. januar 2004 Del Skrevet 26. januar 2004 "Stay logged in"? Som at man f.eks. kan krysse av i en rubrikk når man logger inn for at serveren skal huske deg..? Lenke til kommentar
cipher Skrevet 26. januar 2004 Forfatter Del Skrevet 26. januar 2004 jepp akkurat slik... Lenke til kommentar
Getchoo Skrevet 26. januar 2004 Del Skrevet 26. januar 2004 Da kan du jo bruke cookies, eller database (med ip husking) Selv bruker jeg cookies på min sider, og det fungerer flott Lenke til kommentar
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå