Gå til innhold

PHP login med cookie


Anbefalte innlegg

hei,

 

Jeg er ute etter ett login script som setter en cookie med timeout på 10min når man logger inn.

 

Og er det mulig å ha en ting som sjekker om cookie'en stemmer på en annen side f.eks om den er der så sier den noe sånt som du er logget inn, else du er ikke logget inn.

om det lar seg gjøre hvordan? :hmm:

 

Takker for alle svart.

Lenke til kommentar
Videoannonse
Annonse

En cookie er som regel permanent. Som feks "Husk Meg"-funksjonen på diverse forum.

 

En session bruker man som regel når men ikke benytter en slik funksjon, den kan du sette timeout på.

$_SESSION['timeout'] = time() + (60*10);

 

Da kan du enten sjekke om $_SESSION['timeout'] eksisterer, og samtidig sjekke at den er større enn time(), og da sette den nok en gang.

Dette for at sesjonen skal leve i 10 nye minutter.

Eller du kan lage en egen sesjon, feks $_SESSION['innlogget'] = 1;

 

//brukeren er logget inn
$_SESSION['timeout'] = time() + 600; //600 = 10 minutter
header("Location: nyside.php); //Videresender brukeren til nyside.php
exit; //Avslutter resten av scriptet.

//nyside.php
if ( isset ( $_SESSION['timeout'] ) && $_SESSION['timeout'] > time() )
{
 //Du er fortsatt innlogget, forsett med det du gjorde.
}
else
{
 //Logg inn på nytt du.
}

Lenke til kommentar

Må ta dette ut fra mitt hode da jeg ikke husker detaljene....

 

cookie er jo noe som lagres på brukerens maskin, ergo mulig å endre ... farlig med andre ord.

 

Når en bruker logger inn så lager jeg en hash(md5) av et random nummer eller noe. Denne hashen lagres på bruker i db, og til cookie. Passer på at denne hashen er unik, fordi man skal kunne hente opp en bruker fra db med hashen.

Så i db på bruker så lagrer man når man logget inn, eller sist aktivitet alt etter hva man ønsker.

Ved neste gang en bruker loader en side, så erdet jo bare å hente hash fra cookie, slå opp bruker fra db og hent med tiden ... sjekk tid, og ta en avgjørelse.

 

Bare husk å slette fra db hashen på logout, og når det viser seg at bruker har overskredet tiden. Gjerne sett en default verdi i db i hash feltet som ingen brukere kan opprette på.

 

Dette er nok noe paranoid løsning, som kanskje er litt db ineffektiv, men så lager jeg ikke systemer for mer enn en liten skare brukere med liten total load på db. (hobbyting med andre ord).

 

Men går også an å bruke session variablen til å lagre tiden/hashen, og andre interessange variabler. Dette blir jo liggende på serveren, og ikke sendt over nett til klient.

Lenke til kommentar

login.php:

<?php
function checkLogin($password) {
if (!isset($_COOKIE['password']) {
  return false;
}

else if ($_COOKIE['password'] !== md5($password)) {
  return false;
}

else {
  return true;
}
}

$password = "et_passord";

if (isset($_POST['password']) {
  setcookie("password", md5($_POST['password']), time() + 60 * 60 * 10) // gyldig i 10 min
}

if (!checkLogin($password)) {
?>
<form method="post" action="">
Password: <input type="password" name="password">
<input type="submit" value="Log in">
</form>
<?php
exit;
}

 

Så i alle passord-beskyttede filer:

require_once("login.php");

 

;)

 

Ikke testet, skrevet i full fart, men sånn ca slik ;)

 

Uansett ville jeg heller brukt sessions til innlogging som skal være gyldig i bare 10 min, cookies er bedre til å lagre innlogging i flere dager f.eks...

Lenke til kommentar

<?php
function checkLogin($password) {
if (!isset($_COOKIE['password']) {
 return false;
}

else if ($_COOKIE['password'] !== md5($password)) {
 return false;
}

else {
 return true;
}
}

$password = "et_passord";

if (isset($_POST['password']) {
 setcookie("password", md5($_POST['password']), time() + 60 * 60 * 10) // gyldig i 10 min
}

if (!checkLogin($password)) {
?>
<form method="post" action="">
Password: <input type="password" name="password">
<input type="submit" value="Log in">
</form>
<?php
exit;
}

 

 

Dette scriptet funker ikke.. det skjer ingenting.. Hva er feil? :hmm:

Endret av The_Lozer
Lenke til kommentar

<?php
function checkLogin($password) {
if (!isset($_COOKIE['password']) {
 return false;
}

else if ($_COOKIE['password'] !== md5($password)) {
 return false;
}

else {
 return true;
}
}

$password = "et_passord";

if (isset($_POST['password']) {
 setcookie("password", md5($_POST['password']), time() + 60 * 60 * 10) // gyldig i 10 min
}

if (!checkLogin($password)) {
?>
<form method="post" action="">
Password: <input type="password" name="password">
<input type="submit" value="Log in">
</form>
<?php
exit;
}

 

Hva er feil her?

 

Takker for alle svar

Lenke til kommentar

<?php
function checkLogin($password) {
if (!isset($_COOKIE['password'])) {
return FALSE;
}

else if ($_COOKIE['password'] !== md5($password)) {
return false;
}

else {
return true;
}
}

$password = "et_passord";

if (isset($_POST['password'])) {
setcookie("password", md5($_POST['password']), time() + 60 * 60 * 10); // gyldig i 10 min
}

if (!checkLogin($password)) {
?>
<form method="post" action="">
Password: <input type="password" name="password">
<input type="submit" value="Log in">
</form>
<?php
exit;
}
?>

 

Det var noen glemte ) og en ;

:)

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...