Gå til innhold

innloggingssystem


Anbefalte innlegg

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 av cipher
Lenke til kommentar
Videoannonse
Annonse

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 :thumbup:

 

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 :shrug:

 

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

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 av cipher
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å
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...