MHZMedlem sedan apr. 200555 inlägg
Efter massa pill ändrar jag frågan och undrar om detta ser bra ut? Verkar fungera eller om det kan göras bättre.
Skapat kakor
setcookie('userKaka', $userName, false);
setcookie('passKaka', $userPass, false);
setcookie('nivaKaka', $nivaKaka, false);
Som skydd på min sida har jag nu
$user = $row['user'];
$pass = $row['pass'];
if (intval($nivaKaka > 1) AND ($userKaka = $user) AND ($passKaka = $pass))
{
}
else
{
header("Location: index.php");
}
Jag vill kolla både namn/pass samt vilken nivå man loggar in på.
metalboyMedlem sedan jan. 2005870 inlägg
1. När du anropar setcookie så sätter du expire till false. Detta värde ska vara ett heltal, vilket gör att PHP gör om false till dess motsvarande heltal, vilket är 0. 0 är dessutom default-värdet för setcookies expire-parameter, det gör att du kan skippa att skicka med ett värde där och på så sätt få ner din filstorlek, om än ytterst lite :)
2. Vad innehåller $userPass? Jag hoppas att det är en hash av lösenordet, så att du inte lagrar lösenordet i klartext i kakan (samma sak gäller för databasen).
3. Eftersom du sätter expire till 0 så kommer kakan att försvinna när webbläsaren stängs. Varför använder du då kakor istället för sessioner?
4. Slutparentesen för anropet till intval() sitter fel i din if-sats. Ändra till intval($nivaKaka) > 1.
5. Vid omdirigering med header("Location") bör du lägga in exit() efter header-anropet, detta eftersom scriptet annars fortsätter exekveras
header("Location: index.php");
exit();
6. I koden du visar här så är if-satsen tom, är det så på din sida också? I så fall är det bättre att ändra logiken i if-satsen så att du kan skippa else.
Antingen kan du negera hela din befintliga logik
if (!(intval($nivaKaka) > 1 && $userKaka = $user && $passKaka = $pass)) {
header("Location: index.php");
exit();
}
eller så kan du "vända" på logiken
if (intval($nivaKaka) <= 1 || $userKaka != $user || $passKaka != $pass) {
header("Location: index.php");
exit();
}
MHZMedlem sedan apr. 200555 inlägg
Man kan välja 'false' eller '60 dagar' med kryssruta vid inlogg så därför använder jag kakor och det är en hash på lösenordet.
När det gäller skyddet för sidor verkar detta vara det jag söker
if (!(intval($niva) < 2 && $userKaka = $user && $passKaka = $pass)) {
header("Location: index.php");
exit;
}
I klartext fungerar det att alla under nivå 2 kan se sidan och de med nivå 2 skickas till inloggningen på index.php.
Ska även de på nivå 2 kunna se sidan bilr det
if (!(intval($niva) < 3 && $userKaka = $user && $passKaka = $pass)) {
header("Location: index.php");
exit;
Har jag förstått detta rätt nu?
metalboyMedlem sedan jan. 2005870 inlägg
Ja det är korrekt förstått tror jag. Dock ser jag ett fel som jag missade tidigare. Ett likhetstecken är tilldelning, du vill göra en jämförelse och då är det dubbla likhetstecken som ska användas.
if (!(intval($niva) < 2 && $userKaka == $user && $passKaka == $pass)) {
Personligen hade jag föredragit att använda den andra varianten jag skrev:
if (intval($niva) > 1 || $userKaka != $user || $passKaka != $pass) {
då jag tycker att det är lättare att förstå den när man snabbt ögnar igenom koden, men som sagt, det är bara min personliga preferens.