Gå til innhold

Sjekke om login er valid


Anbefalte innlegg

Holder på med et lite prosjekt, og har laget en loginfunksjon.

lagde den for en stund siden. er litt frem å tilbake med hvor mye jeg får jobbet med det grunnet skole o.l.

uansett, får ikke denne her til å virke:

function sjekklogginn(){

$ip = $_SERVER['REMOTE_ADDR'];
$browser = $_SERVER['HTTP_USER_AGENT'];

 if($_SESSION['loggetinn'] == ja){
   $brukersjekk = mysql_real_escape_string($_SESSION['brukernavn']);
  $passordsjekk = mysql_real_escape_string($_SESSION['passord']);
  
 $query = mysql_query("SELECT nick, passord FROM brukere WHERE nick = '$brukersjekk'") or die(mysql_error());
 
 $row = mysql_fetch_object($query);
 $level = $row->level;
 $passord = $row->passord;
 $brukernavn = $row->nick;
 $ip = $_SERVER['REMOTE_ADDR'];
   $browser = $_SERVER['HTTP_USER_AGENT'];
 
 if($_SESSION['brukernavn'] !== $brukernavn or $_SESSION['passord'] !== $passord or $_SESSION['browser'] !== $browser){
   header("location:../brukere/loggut.php");
 } else {
   return true;
 }
 }
}

 

den skal brukes i begynnelsen av hver side som trenger autorisasjon for å sjekke at det virkelig er den som logget inn som enda er der.

men den funker ikke, noen som kan se hvorfor?

Endret av kennteh
Lenke til kommentar
Videoannonse
Annonse

1.

if( $_SESSION['loggetinn'] == ja )

sett ja i tøddler. 'ja'. Da forventes også at man setter 'ja' ved innlogging, og 'nei' ved utlogging eller null om du vil.

 

2.

passord i databasen bør være en md5() av passordet. Du bør aldri lagre passordet i klartekst i databasen. punktum.

forandre derfor query til å inkludere passord. ... WHERE nick = $username AND passord = md5($_SESSION['passord'])

 

Det eneste du sjekker da er om resultatet som returneres faktisk har 1 resultat. ikke 2 ikke 0.

 

da kan du droppe resten av koden, og putte på en echo om du får et resultat eller ikke. Så kan du etterpå slenge på ip og browser sjekk om du vil.

Lenke til kommentar

Får du en feilkode som "reference to undefined variable $res at line x" ellernoe?

 

IIS sender vel feilmeldinger til event loggeren i windows (control panel->administrative tools->event logs)

 

Apache har egen textfil som er tilgjengelig /installdir/logs/error.log ellernoe.

 

...
$query = mysql_query(...);
...
$row = mysql_fetch_object($res);
...

 

Bytt ut query med res eller omvendt.

Endret av grimjoey
Lenke til kommentar

ingen feilmeldinger i logger eller noe som helst, må være en ren kodefeil, har også fikset feilen med query\res.

 

bruker funksjonen slik forresten:

if(sjekklogginn()){
echo "du er fet";
}

 

er det kanskje det som er feil?

Lenke til kommentar

return true;

 

bytt til:

 

return 1;

 

Unngå klartekst uten apostrofer. Er true et reservert ord? Skrives ikke det i så fall TRUE eller spiller ikke det noen rolle? 1 funker vertfall uansett. "true" ville også funket ettersom det ikke er NULL.

Endret av grimjoey
Lenke til kommentar

forresten...

 

$query = mysql_query("SELECT nick, passord FROM brukere WHERE nick = '$brukersjekk'") or die(mysql_error());

 

mangler ; i slutten av query

 

skal være:

 

$query = mysql_query("SELECT nick, passord FROM brukere WHERE nick = '$brukersjekk';") or die(mysql_error());

 

eller noe

Endret av grimjoey
Lenke til kommentar

jeg bruker litt annen syntaks i strenger. du kan jo prøve

 

$query = mysql_query("SELECT nick, passord FROM brukere WHERE nick = '$brukersjekk';") or die(mysql_error());

 

til:

 

if(!$query = mysql_query('SELECT nick,passord FROM brukere WHERE nick=\''.$brukersjekk.'\';') die(mysql_error());

 

... la også merke til en annen ting nå. etter $row = mysql_fetch_object(...); setter du objekt data til variabler og du har en referanse til $row->level som du ikke har med i queryen. Kanskje du burde ha:

 

if(!$query = mysql_query('SELECT nick,passord,level FROM brukere WHERE nick=\''.$brukersjekk.'\';') die(mysql_error());

Lenke til kommentar

Må nok legge til en else i det scriptet der, eller så vil brukeren få begge meldingene om han/hun ikke er logget inn. Og du glemte et semikolon. Jeg ville gjort det slik:

PHP
<?php

if ($_SESSION['innlogget'] != true)

{

echo "Du er ikke innlogget!";

} else {

echo "Du er innlogget....";

}

?>

 

Edit:

hvordan setter du $_SESSION['loggetinn'] ?

$_SESSION['loggetinn'] = true;

Og når brukeren skal logge ut kan du bruke $_SESSION['loggetinn'] = false eller session_destroy()

Endret av mhbakke
Lenke til kommentar

har vært borte noen dager...

men grimjoey:

if(mysql_num_rows($res) !== 0) {
 $row = mysql_fetch_object($res);
 $level = $row->level;
 $ip = $_SERVER['REMOTE_ADDR'];
 $browser = $_SERVER['HTTP_USER_AGENT'];
$brukernavn = $row->nick;

 $_SESSION['loggetinn'] == ja;
 $_SESSION['brukernavn'] = $brukernavn;
 $_SESSION['passord'] = $passord;
 $_SESSION['level'] = $level;
 $_SESSION['ip'] = $ip; 
 $_SESSION['browser'] = $browser;

slik settes sessionene, og det funker hvis jeg lager if-sjekk med bare loggetinn, men blir sikrere hvis jeg får den funksjonen jeg har laget til å funke.

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