Ik ben bezig met een bestaand inlogscript.
Met een vinkje kun je aangeven of je 30 dagen automatisch ingelogd wilt blijven.
Alleen werkt dat met de gebruikersnaam en het wachtwoord in twee cookies opgeslagen.
Ik heb in de DB een tabel aangemaakt met 2 cookies.
De eerste gebaseerd op een gecodeerde tijd die is ingesteld bij het aanmaken van de registratie.
De tweede gebaseerd op het IP, maar dient uitsluitend om bij andere locatie het automatisch inloggen te blokkeren.
Er wordt een sessie aangemaakt met de gegevens uit tabel 1
De codering voor de cookie opslag zitten in tabel 2.
De link tussen tabel 1 en tabel 2 wordt gemaakt via het id.
Moet/kan dat met meerdere sessies tegelijk?
Ik heb eerlijk gezegd geen idee hoe ik dit omgebouwd krijgt!
Iemand die me verder kan helpen?
@Ivo, dat is een tradeoff van gebruikersgemak versus security.
Je kunt dan twee dingen doen: een andere voorziening inbouwen, iets met nonces en user agent + een random string die elke page access wisselt, of het echt vasttimmeren met een IP adres.
Simpelweg de IP check achterwege laten en maar hopen dat alles goed gaat als je op een publiek (en mogelijk unencrypted) netwerk surft is vragen om ongelukken. Je zult op een of andere manier moeten garanderen dat je met een bepaalde gebruiker van doen hebt. Enkel een hash uit een cookie... I dunno man. Hangt ook af of je applicatie zelf veilig is he. Als iemand je cookies kan stelen ben je zonder IP check de klos.
Dan kun je weer https inzetten... Tis maar net hoeveel geld je tegen je oplossing aan wilt smijten he.
Ik lees jullie reacties wel uiteraard... Maar ik leer toch vlotter vanuit een (oud) voorbeeld script. Op zich werkt dat prima.
Zo neem ik met name later ook mee welke alternatieven er zijn, zowel in programma's als structuur.
En ik heb nu een probleem waar ik tegenaan loop... En wil graag weten of uit de gegeven query de value van de ID te halen is.
Ik vraag om een tafelpoot, maar jullie geven me adviezen over het inrichten van mijn huis en de meubels die er het beste bij staan, haha
Overigens ook heel belangrijk hoor....neem het ook allemaal mee.
Bedankt in ieder geval voor jullie reacties tot nu toe.
De tafelpoot: Ja.
<?php
$db = new mysqli('localhost', 'user', 'pass', 'demo');
if($db->connect_errno > 0){
die('Unable to connect to database [' . $db->connect_error . ']');
}
$sql = "SELECT * FROM users WHERE username='".$db->real_escape_string(trim($_POST['username']))."' LIMIT 1";
if($result = $db->query($sql)){
if($row = $result->fetch_assoc()) { // ik verwacht max 1 record terug dus gebruik ik geen while maar een if
echo $row['id'] . ' - ' . $row['username'] . '<br />';
// hier ga je vervolgens het wachtwoord vergelijken
if($row['password'] == mijnPasswordEncryptFunctie($_POST['password']) {
$session['logged_in'] = $row['id'];
header('Location: index.php');
exit;
}
} else {
$message = 'Ongeldige username en/of wachtwoord'; // geen gebruiker met die naam gevonden
}
} else {
die('Ongeldige query'); // er ging iets fout
}
?>
Bedankt Frank voor het script. Je hebt me op goede spoor gezet. Met wat aanpassingen heb ik het ID nu kunnen vangen.
Het idee van uitsluitend die ID in de sessie te plaatsen spreekt me wel aan.
De gegevens in de sessie dienen uitsluitend om bij het welkom de gegevens te tonen.
Daarnaast worden de gegevens gebruikt bij een edit pagina, om weer te geven als reeds eerder ingevuld.
Die kunnen dan gewijzigd worden.
Hoe kan ik het beste de gegevens weer naar formulier verplaatsen i.p.v. per sessie?
Kan ik die queries zonder veiligheidsproblemen ook in het formulier toevoegen?
bedankt voor de tips....
Wat betreft de cookies hadik al twee waarden gereserveerd in aparte tabel.
De eerste was er een gebaseerd op gecodeerde tijd van aanmaak account.
De tweede was een gecodeerd ipadres. Die dient uitsluitend om te kijken of er vanuit andere omgeving wordt ingelogd.
Maar kwam er niet helemaal uit om die in te voeren op het oude script. Komt nog wel.
Was gebaseerd op de gebruikersnaam (ongecodeerd) en het wachtwoord (gecodeerd).
Dus heel onveilig... Maar dat bouw ik later in....
Geen set_charset() bij het maken van een connectie?
:(
EDIT: $session['logged_in']? Wut?
EDIT: tevens: een echo, en dan een header()? Ayyy.
EDIT: waarom wordt in het tweede fragment het user id niet meer ge-escaped?
Ja, ik weet het...dus wat studeren blijven.... Eind maart krijgen we PHP 5.6 bij de provider.
Heb dus nog wel even de tijd...
Maar is ook hobby voor me...ben ook 2 x 32...