Jeg udvikler et website, hvor visse af siderne kræver login før de er tilgængelige.
Når man besøger en af disse sider, tjekker serveren om man er logget ind, og ellers redirect'er den en til login-siden.
Når brugeren logger ud (og cookie'en, der siger denne er logget ind, slettes), kan brugeren stadig klikke på tilbageknappen i sin browser og se de sider, man ellers skal være logget ind for at se. Hvordan undgår jeg dette?
molte >> Du viser et lille fragment af din kode. Det er ikke til at sige, hvad du skal gøre anderledes, når vi ikke kan se mere. Fejlen kan ligge alle mulige forskellige steder
@showsource: Brugeren kan i øjeblikket sagtens logge ud. Cookie'en, jeg bruger til at definere, at man er logget ind, bliver fint slettet.
Det der er galt er, at når brugeren går tilbage i sin historik til en side, hvor der kræves login, når vedkommende ikke er logget ind, viser browseren bare den side, der ligger i dens cache i stedet for at load den 'rigtige' side igen for at blive redirect'et.
molte >> Så længe du ikke hæver informationsniveauet, hæver vi tråden sig næppe over quizniveauet. Ingen af os er i tvivl om, hvordan dit problem ytrer sig, men du burde ikke have det problem, så uden flere informationer er det svært at gætte sig frem til, hvorfor det opstår =)
Så godt som øverst (det eneste, der er før er en 'define' og en 'require_once') i den side, man skal være logget ind for at se, har jeg skrevet
if (!check_login()) header('Location: login.php');
check_login-funktionen ser således ud:
function check_login() { $login_params = remove_magic_quotes($_COOKIE); return check_password($login_params['mail'], $login_params['password']); }
remove_magic_quotes fjerner bare magic_quotes_gpc (som det nok kan regnes ud).
Så har jeg følgende:
function check_password($mail, $password) { // check if no login information was given if (empty($mail) || empty($password)) { return false; }
// connect to database $mysqli = new mysqli('localhost', 'user', 'password', 'database');
// check if connection error occured if (mysqli_connect_errno()) { return false; }
// get correct password if any if ($stmt = $mysqli->prepare('SELECT password FROM clients WHERE mail = ? LIMIT 1')) { $stmt->bind_param('s', $mail); $stmt->execute(); $stmt->bind_result($result); $stmt->fetch(); $stmt->close(); } else { $result = null; }
// disconnect from database $mysqli->close();
// check if passwords match if ($password == $result) { return true; } else { return false; } }
Slutteligt kan jeg sige, at disse funktioner findes i en fil jeg 'require_once'er. I denne fil tjekker jeg også om den 'define' jeg omtalte tidligere er defineret, så man ikke kan tilgå den side direkte.
Forresten sker samme fejl, hvis man er logget ind og går tilbage til login-siden (som eller også burde redirect). Hvis jeg opdaterer siden gør den som den skal.
Jeg har lige fundet ud af, at fejlen kun forekommer med Firefox, Google Chrome og Opera. Med IE og Safari virker det fint.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.