Avatar billede zyxep Nybegynder
17. oktober 2003 - 03:27 Der er 15 kommentarer og
1 løsning

fejl med login system (cookies, sessions og mysql)

heysan fokes


jeg har lavet et login system med cookies og sessions!

der er er 1 lille fejl :( ret så provokerende

det er når jeg logger ind så ændre den ikke den login boks til ens admin menu den viser bare login boksen og når man skriver adr'en til ens admin menu i adr boksen så virker den, men den skal includes når man logger ind :(

ved ikke hvad der kan være galt, det virker fint et andet sted på min apache server, men når jeg direkte kopiere det med sql og det hele så fungere det ikke :(

nogen som kan hjælpe

mine filer er sådan her:

sql'en:
CREATE TABLE brugere (
  id int(11) NOT NULL auto_increment,
  username varchar(100) NOT NULL default '',
  PASSWORD varchar(100) NOT NULL default '',
  LEVEL enum('1','2','3') NOT NULL default '1',
  PRIMARY KEY  (id)
) TYPE=MyISAM;

min login.php:
<?php
session_start();
include("db.inc");
?>
<form action="?vis=check&login=yes" method="post">
<font size="1" color="black" face="Verdana">Username:</font><br>
<font style="font:bold 10px verdana;"></font>
&nbsp;<input type="text" name="username" style="background:#A0BBD0;border:1px solid black;font:bold 10px verdana;" size="10"><br>
<font style="font:bold 10px verdana;"></font>
<font size="1" color="black" face="Verdana">Password:</font><br>
&nbsp;<input type="password" name="password" style="background:#A0BBD0;border:1px solid black;font:bold 10px verdana;" size="10"><br>
<input type="checkbox" name="husk" value="ja" border="0" onClick="return(confirm('OBS: Hvis du sidder ved en offentlig computer, netcafé el. lign., \nkan det ikke anbefales at bruge denne funktion'))"> husk mig
<br style="font-size: 5px">
&nbsp;<input type="submit" name="submit" value="Log ind" style="background:#A0BBD0;border:1px solid black;font:bold 10px verdana;">
</form>

min loggedin.php (den fil som skal includes når man loggerind):

<?php
session_start();
$res = mysql_query("SELECT * from brugere where username = '$username'");
session_register("user"); $user = mysql_fetch_array($res);
echo "du er nu logget ind som " . $_SESSION['user']['username'] . "<br>";
echo "du er level " . $_SESSION['user']['level'] . "<br>";
?>

check.php (den fil som checker det hele):

<?php
session_start();
session_register("session_id()", "username", "password");
include "db.inc";
if($_GET['login'] == "yes") {
    if ($_POST['husk']=="ja") {
    $res = mysql_query("SELECT * from brugere where username = '$username'");
    $p = mysql_fetch_array($res);
    if($p[username] == $username && $p[password] == $password && $username != "" && $password != "")
    {
        setcookie ("username", "$username", time()+31536000, "/"); // set cookie 365 dage
        setcookie ("password", "$password", time()+31536000, "/");
    }else {
        setcookie ("username", "$username", 0, "/"); // set cookie 0 dage (slettes ved browserluk)
        setcookie ("password", "$password", 0, "/");
    }
        header("Location: ?vis=nyheder");
    }else {
        echo "$_SESSION[username] findes ikke prøv igen";
    }
}
?>

db.inc indholder en connection til mysql databasen!

jeg bruger ?p=<side> til at komme rundt på lidt nemmere for mig at arbejde med


håber nogen kan hjælpe mig med mit prob for det er altså ret så provokerende kan ikke bygge videre på det uden den fejl er rettet

!!!


lige 1 ting til, min logout til den, den virker heller ik den sletter ikke cookien :(

den ser således ud:

<?php
session_start();
$end = session_destroy();
setcookie("username", "0", "/");
if ($end) {
header("Location: ?p=nyheder");
} else {
echo "Du kunne ikke logges ud";
}
?>


håber nogen kan hjælpe mig
Avatar billede sukos Juniormester
17. oktober 2003 - 06:07 #1
Du blander måden du sætter sessions på
Brug enten session_register eller $_SESSION[]

check.php

<?php
session_start();
if (isset($_POST["login"]))
    {
    include("db.inc");
    $res = mysql_query("SELECT * from `brugere` where `username` = '". $_POST["username"] ."' AND `password` = '". $_POST["password"] ."'") or die (mysql_error());

    if (mysql_num_rows($res) == 0)
    {
    echo"Fejl i brugernavn eller password";
    exit;
    }else{
    $p = mysql_fetch_array($res);
    $_SESSION["user"]["id"] = session_id();
    $_SESSION["user"]["username"] = $p["username"];
    $_SESSION["user"]["password"] = md5($p["password"]);
    $_SESSION["user"]["level"] = $p["level"];

        if(isset($_POST["husk"]))
        {
        setcookie ("username", $_SESSION["username"], (time()+31536000), "/"); // set cookie 365 dage
        setcookie ("password", $_SESSION["password"], (time()+31536000), "/");
        }else{
        setcookie ("username", "", (time()-3600)); // set cookie 0 dage (slettes ved browserluk)
        setcookie ("password", "", (time()-3600));
        }
    }
        header("Location:?vis=nyheder");
}
?>

I loggedin.php kunne du nøjes med:

<?php
//Ingen session_start() da det jo er en includefil, og du derfor har startet sessions
    if(isset($_SESSION["user"]))
    {
    echo"Hej ". $_SESSION["user]["username"] ."<br>\n";
    echo"Du er level ". $_SESSION["user"]["level"];
    }
?>

medmindre du selvf. vil tjekke op med DB'en hvergang en side loades :O)


Og din logout:
Her skal vel ikke sættes en cookie, hvis man gerne vil huskes til næste gang?
<?php
session_start();
$_SESSION[] = array();
session_destroy();
header("Location:?p=nyheder");
exit;
?>
Avatar billede zyxep Nybegynder
17. oktober 2003 - 19:06 #2
sukos, hmm det virker ik, http://me.zyxep.dk/webradio/ <-- og så prøv at login med brugeren admin med passet admin, den virker ik, den sender ik en videre eller logger ind! før loggede den mig ind men includede ikke :(
Avatar billede zyxep Nybegynder
17. oktober 2003 - 19:11 #3
hvis jeg skifter if (isset($_POST["login"])) ud med if($_GET['login'] == "yes") så virker den! men den includer stadig ikke loggedin.php ved login boksen, koden ved det er

<?
$query = mysql_query("SELECT * FROM brugere WHERE username='$username'") or die ("Kunne ikke vælge felter i database-tabellen");
$p = mysql_fetch_array($query);
if($p[username] == $username && $p[password] == $password && $username != "" && $password != "") {
include("loggedin.php");
}else{
include("login.php");
}
?>

det kan sikkert gøres nemmere!!
Avatar billede sukos Juniormester
18. oktober 2003 - 11:37 #4
Det er vel fordi du ikke har ændret i din formular, at det ikke ville virke?

Vil du tjekke op med DB'en? Ellers kan du jo blot tjekke om $_SESSION["user"] er sat.
Husk at $_SESSION["user"]["password"] er md5() krypteret!
Avatar billede zyxep Nybegynder
18. oktober 2003 - 12:11 #5
det har jeg fjernet, men hvis jeg pakker det ned og sender til dig kan du så prøve at lave det ?
Avatar billede sukos Juniormester
18. oktober 2003 - 12:38 #6
Bare ok, show_source@yahoo.dk

Kikker på det senere i eftermiddag.
Avatar billede sukos Juniormester
18. oktober 2003 - 18:53 #7
Har lagt et eksempel her:

http://www.showsource.dk/php/vis_script.php?id=1066495650

Måske du kan bruge det til noget?
Avatar billede zyxep Nybegynder
18. oktober 2003 - 19:19 #8
sukos, kan du lave det i det design som jeg sendte til dig, ? for så ville du være gud :P så får du point, det er faktisk det her jeg har ønsket mig, men ville jo selv gerne lave det :P men f... det
Avatar billede sukos Juniormester
18. oktober 2003 - 19:34 #9
Har ikke noget tid lige nu! (Har heller ikke noget dump af din DB)

Men i toppen af hver side, skal bruges:

<?php
include("functions.php");
cookie_user();
?>

starter sessions og tjekker om en cookie er sat og viser en evt. besked,

$_SESSION["besked"]
vis_besked()

For at vise forskelligt, bruger du så:

if(!isset($_SESSION["user"]))
vis noget
}else{
vis noget andet.
}

de steder hvor det er aktuelt.
Avatar billede sukos Juniormester
18. oktober 2003 - 19:36 #10
hmm, ja, og

vis_besked();

skal jo bruges der hvor du evt. skulle ha' brug for det
Avatar billede sukos Juniormester
18. oktober 2003 - 19:44 #11
Skal gå nu, men hvis du sender et dump af din DB, vil jeg kikke på det i morgen! :O)
Men vil helt klart kræve en del ændringer i opbygningen af din side
Avatar billede zyxep Nybegynder
18. oktober 2003 - 19:45 #12
sender dumb til dig i en mail, og så kan du rette det :P, men det skal være på den måde som det er på nu, hvis du forstår
Avatar billede zyxep Nybegynder
19. oktober 2003 - 20:43 #13
sukos, you got mail :P hehe
Avatar billede sukos Juniormester
20. oktober 2003 - 12:33 #14
Var ikke på igår, og er nu egentlig ikke lige til at lave det for dig! :O)

Forslag:
1. Brug en includefil til at starte sessions, connecte til DB m.m.
2. Submit din(e) form(s) til en anden fil end index.php
3. Hvis du vil tjekke en session op mod din DB, så gør det med en funktion som returnerer true eller false.
4. Dit tjek på om en fil findes, kan jo bruges til at hente filer fra alle mulige steder! Det bør rettes!
Avatar billede zyxep Nybegynder
20. oktober 2003 - 15:20 #15
hmmm det forstod jeg ik helt :P hehe
Avatar billede zyxep Nybegynder
18. april 2004 - 01:28 #16
lukker
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester