Avatar billede andreas13_fam Nybegynder
03. februar 2009 - 18:00 Der er 15 kommentarer og
1 løsning

Problemmer med login system

Jeg har prøvet at lave et login system men det virker desværre ikke. Problemet er at man bliver logget ind uanset hvad.

Lige så i ved hvordan det er lavet så er her en kort beskrivelse.

Som udgangspunkt for brugeren vist login dellen. Når brugeren trykker post sendes brugernavn og kodeord, men også en tjek besked via POST.
Her efter ses det om det er rigtigt i headderen (før <html>)
Afhængig af hvad brugeren har valgt tjekkes kodeord og brugernavn. Er det rigtigt er $login = "ja" ellers er $login = "nej" og der skrives en fejlmeddelse.
I kan se resultatet her: http://www.kogebogen.a-mweb.dk/

------KODE---- (forkortet)
<?php
session_start();
/*********************************************************
|                                                        |
| Hvis personen har logget ind manuelt                  |
|                                                        |
*********************************************************/
if ($_POST['tjek'] == "login")
{
    include "/rod/opret-forbindelse.php"; //opretter forbindelse
    $username = $_POST['brugernavn'];
    $password = hash('sha256', $_POST['password']);
    $findesbruger = mysql_num_rows(mysql_query("SELECT * FROM `kogebogen-bruger` WHERE brugernavn='".$username."' AND kodeord='".$password."'") OR DIE(mysql_error()));
   
    if ($findesbruger == "1")
    {
        $login = "ja";
        $_SESSION['brugernavn'] = "$username";
        $_SESSION['password'] = "$password";
        if ($_POST['huskmig'] == "On" && $login == "ja")
        {
        setcookie("login[brugernavn]", "$username");
        setcookie("login[password]", "$password");
        }
    }
    else
    {
        if ($_POST['brugernavn'] == "" || $_POST['brugernavn'] == "password")
        {
        $login = "nej";
        $fejl = "Skriv et brugernavn og/eller kodeord";
        }
        else
        {
        $login = "nej";
        $fejl = "Brugernavnet og/eller kodeordet er forkeret";
        }
    }
}
/*********************************************************
|                                                        |
| Hvis personen har logget ind uden cookies              |
|                                                        |
*********************************************************/
elseif (isset($_SESSION['brugernavn']) && isset($_SESSION['password']) && $_POST['tjek'] != "login")
{
    include "/rod/opret-forbindelse.php"; //opretter forbindelse
    $username = $_SESSION['brugernavn'];
    $password = $_SESSION['password'];
    $findesbruger = mysql_num_rows(mysql_query("SELECT * FROM `kogebogen-bruger` WHERE brugernavn='".$username."' AND kodeord='".$password."'") OR DIE(mysql_error()));
    if ($findesbruger == "1")
    {
        $login = "ja";
    }
    else
    {
        $login = "nej";
        $fejl = "Fejl: ændring i session";
    }
}
/*********************************************************
|                                                        |
| Hvis personen logges ind via cookies                  |
|                                                        |
*********************************************************/
elseif (isset($_COOKIE['login']) && $_POST['tjek'] != "login" !isset($_SESSION['brugernavn']) && !isset($_SESSION['password']))
{
    include "/rod/opret-forbindelse.php"; //opretter forbindelse
    $username = $_COOKIE['login']['brugernavn'];
    $password = $_COOKIE['login']['password'];
    $findesbruger = mysql_num_rows(mysql_query("SELECT * FROM `kogebogen-bruger` WHERE brugernavn='".$username."' AND kodeord='".$password."'") OR DIE(mysql_error()));
    if ($findesbruger == "1")
    {
        $login = "ja";
    }
    else
    {
        $login = "nej";
        $fejl = "Fejl: ændring i cookies";
    }
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="da">
<html>
<head>
.... ligegyldig html-kode ....
</head>
<body>
.... ligegyldig html-kode ....
<?php
/*********************************************************
|                                                        |
| normal login                                          |
|                                                        |
*********************************************************/
function login($fejl="")
{
echo '
    <tr>
        <td class="sidebox_top">
        Login
        </td>
    </tr>
    <tr>
        <td class="sidebox_tekst">
            <form method="post" action="#">
                <table style="border:none;" class="login">
                    <tr>
        ';
                        if ($fejl != "")
                        {
                        echo '
                                    <tr>
                                        <td>
                                            <span style="font-size:70%;position:relative;top:0px;left:4px;">'.$fejl.'</span>
                                        </td>
                                    </tr>
                                ';
                        }
echo '
                        <td>
                            <span style="font-size:70%;position:relative;top:0px;left:4px;">Brugernavn:</span>
                        </td>
                    </tr>
                    <tr>
                        <td style="background-image:url(img/login.png);">
                    <!--[if IE]>
                    <div style="position:relative;top:-2px;left:0px;">
                    <![endif]-->
                            <input tabindex="1" maxlength="20" name="brugernavn" type="text" class="login" />
                    <!--[if IE]>
                    </div>
                    <![endif]-->
                        </td>
                    </tr>
                    <tr>
                        <td>
                            <span style="font-size:70%;position:relative;top:0px;left:4px;">Password:</span>
                        </td>
                    </tr>
                    <tr>
                        <td style="background-image:url(img/login.png);">
                    <!--[if IE]>
                    <div style="position:relative;top:-2px;left:0px;">
                    <![endif]-->
                            <input tabindex="2" maxlength="20" name="password" type="password" class="login" />
                    <!--[if IE]>
                    </div>
                    <![endif]-->
                        </td>
                    </tr>
                    <tr>
                        <td>
                    <!--[if IE]>
                    <div style="position:relative;top:0px;left:-4px;">
                    <![endif]-->
                            <input name="huskmig" type="checkbox" style="position:relative;top:0px;left:3px;" />
                            <span style="font-size:70%;position:relative;top:-2px;left:5px;">Husk mig</span>
                    <!--[if IE]>
                    </div>
                    <![endif]-->
                        </td>
                    </tr>
                    <tr>
                        <td>
                            <input type="hidden" name="tjek" value="login" />
                            <input type="image" src="img/login_buttom.png" name="button" id="login" onmouseover="document.getElementById(\'login\').src=\'img/login_buttom-selekt.png" onmouseout="document.getElementById(\'login\').src=\'img/login_buttom.png" />
                        </td>
                    </tr>
                    <tr>
                        <td>
                            <a href="index.php?profil=opret">
                                <img class="no-border" src="img/Opret_buttom.png" alt="login" id="Opret" onmouseover="document.getElementById(\'Opret\').src=\'img/Opret_buttom-selekt.png" onmouseout="document.getElementById(\'Opret\').src=\'img/Opret_buttom.png" />
                            </a>
                        </td>
                    </tr>
                </table>
            </form>
        </td>
    </tr>
    <tr>
        <td class="sidebox_bottom"></td>
    </tr>
        ';
}
/*********************************************************
|                                                        |
| normal login                                          |
|                                                        |
*********************************************************/
function loggetind()
{
global $username;
echo '
    <tr>
        <td class="sidebox_top">
        Velkommen
        </td>
    </tr>
    <tr>
        <td class="sidebox_tekst">
        Velkommen '.$username.' du har <br />
        nu følgene mulighedder<br />
            <a href="index.php?Opret=skriv">
                <img src="img/Opskrift_buttom.png" class="loginButton" id="opskirft" style="border:none;" alt="Opret opskrift" onmouseover="document.getElementById(\'opskirft\').src=\'img/Opskrift_buttom-selekt.png\';" onmouseout="document.getElementById(\'opskirft\').src=\'img/Opskrift_buttom.png\';" />
            </a>
            <a href="index.php?profil=se">
                <img src="img/Profil_buttom.png" class="loginButton" id="Profil" style="border:none;" alt="Profil" onmouseover="document.getElementById(\'Profil\').src=\'img/Profil_buttom-selekt.png\';" onmouseout="document.getElementById(\'Profil\').src=\'img/Profil_buttom.png\';" />
            </a>
        </td>
    </tr>
    <tr>
        <td class="sidebox_bottom"></td>
    </tr>
        ';
}
/*********************************************************
|                                                        |
| aktiver login                                          |
|                                                        |
*********************************************************/
$login = "ja";
if ($login == "ja")
{
loggetind();
}
elseif ($login == "nej")
{
login($fejl);
}
else
{
login();
}
/*********************************************************
|                                                        |
| tjekker login                                          |
|                                                        |
*********************************************************/
?>
Avatar billede erikjacobsen Ekspert
03. februar 2009 - 18:16 #1
Hvorfor sætter du $login til "ja" lige gfør du checker på den:

$login = "ja";
if ($login == "ja")
Avatar billede andreas13_fam Nybegynder
03. februar 2009 - 19:58 #2
Ja det var vist for den gang jeg testede det.
Det skal bare fjernes. Desvære løser det ikke hele problemmet.
Det virker som om at der er noget galt med $username og $password
if ($_POST['tjek'] == "login")
{
    include "/rod/opret-forbindelse.php"; //opretter forbindelse
    $username = $_POST['brugernavn'];
    $password = hash('sha256', $_POST['password']);
...
}
Da jeg ikke kan skrive de variabler ud, mens jeg godt kan skrive
$_POST tjek, brugernavn og password ud.
Avatar billede erikjacobsen Ekspert
03. februar 2009 - 20:20 #3
"Da jeg ikke kan skrive de variabler ud," ... det lyder helt forkert. Du skal da vide hvad de indeholder. Jeg har ikke prøvet at forstå hvor det går galt i koden.

Men dit generelle login-system er over-kompliceret. Du skal bruge en enkelt sessionsvariabel med brugernavn, til at se at man er logget ind, når man er det (fra form eller cookie), og ikke begynde at slå brugernavn og password op ud fra indholdet af sessionsvariabler.
Avatar billede andreas13_fam Nybegynder
03. februar 2009 - 20:35 #4
Ja variablerne indeholder: "" det er det jeg mener.

Men nu tror jeg at jeg har fået noget til at virke, jeg for da denne fejl kode :D

Parse error: syntax error, unexpected '!' in /home/amwebdk/public_html/Portal/WWW_Kogebogen/index.php on line 65

line 65:
elseif (isset($_COOKIE['login']) && $_POST['tjek'] != "login" !isset($_SESSION['brugernavn']) && !isset($_SESSION['password']))
Avatar billede andreas13_fam Nybegynder
03. februar 2009 - 20:59 #5
Ja der manglede et OG (&&)
Så nu virker $_POST login og $_SESSION login. Men $_COOKIE login virker ikke desvære.

Kort ser kode-delen sådan ud nu...

setcookie("login[brugernavn]", "$username");
setcookie("login[password]", "$password");

elseif (isset($_SESSION['brugernavn']) && isset($_SESSION['password']) && $_POST['tjek'] != "login")
{
    include "/home/amwebdk/public_html/Portal/MySQL/opret-forbindelse.php"; //opretter forbindelse
    $username = $_SESSION['brugernavn'];
    $password = $_SESSION['password'];
    $brugersql = "SELECT * FROM `kogebogen-bruger` WHERE brugernavn='".$username."' AND kodeord='".$password."'";
    $bugervissql = mysql_query($brugersql) OR DIE(mysql_error());
    $findesbruger = mysql_num_rows($bugervissql);
    if ($findesbruger == "1")
    {
        $login = "ja";
    }
    else
    {
        $login = "nej";
        $fejl = "Fejl: ændring i session";
    }
}

PS: jeg har godt læst at du mener at det er over-kompliceret, og det er da noget jeg vil overveje meget alt lave om på. Men lige nu vil jeg bare gerne have det til at virke.
Avatar billede andreas13_fam Nybegynder
03. februar 2009 - 21:00 #6
Det var da noget sluder. sådan...

setcookie("login[brugernavn]", "$username");
setcookie("login[password]", "$password");

elseif (isset($_COOKIE['login']['brugernavn']) && isset($_COOKIE['login']['password']) && $_POST['tjek'] != "login" && !isset($_SESSION['brugernavn']) && !isset($_SESSION['password']))
{
    include "/home/amwebdk/public_html/Portal/MySQL/opret-forbindelse.php"; //opretter forbindelse
    $username = $_COOKIE['login']['brugernavn'];
    $password = $_COOKIE['login']['password'];
    $brugersql = "SELECT * FROM `kogebogen-bruger` WHERE brugernavn='".$username."' AND kodeord='".$password."'";
    $bugervissql = mysql_query($brugersql) OR DIE(mysql_error());
    $findesbruger = mysql_num_rows($bugervissql);
    if ($findesbruger == "1")
    {
        $login = "ja";
    }
    else
    {
        $login = "nej";
        $fejl = "Fejl: ændring i cookies";
    }
}
Avatar billede erikjacobsen Ekspert
03. februar 2009 - 21:23 #7
Så må du til at udskrive nogle værdier af variabler, når du kommer til cookie-delen.
Avatar billede andreas13_fam Nybegynder
03. februar 2009 - 21:50 #8
echo $_COOKIE['login']['brugernavn'];
echo $_COOKIE['login']['password'];
udskriver...
Citat: "" altså ingen ting.

Kan men på nogen måde tjekke om cookies er blevet oprettet rigtigt, og se hvad de indeholder uden PHP.
Det vil gøre det lidt letter at teste.
Avatar billede erikjacobsen Ekspert
03. februar 2009 - 22:53 #9
Ved du om du udfører dine linier med setcookie?

Desuden kan du i nogle browsere se dine cookies (fx FF med Webdeveloper Extension)
Avatar billede andreas13_fam Nybegynder
04. februar 2009 - 13:50 #10
Jeg er desværre uden internet lige her fortiden. Men jeg har lavet 2 setcookies, om de bliver aktiveret ved jeg ikke. Men det men det med FF lyder da brugbart.
PS: er det muligt for bruger at ændre en cookies.
Avatar billede andreas13_fam Nybegynder
04. februar 2009 - 14:56 #11
Det virker ikke som om at setcookies bliver aktiveret.
if ($_POST['huskmig'] == "On" && $login == "ja")
{
echo 'HEJ';
setcookie("login[brugernavn]", "$username");
setcookie("login[password]", "$password");
}

Skulle meget gerne komme med en fejl (hedder er sendt, eller noget) men det sker ikke.
$_POST['huskmig'] == "On" bliver sat af en chekboks. Er det ikke "On" værdien bliver, når man sætter et hak?
Avatar billede andreas13_fam Nybegynder
04. februar 2009 - 16:26 #12
Når det var lille "o" så der skulle stå on.
Der bliver oprettet 2 cookies, og de for også de rigtige værdier.

Men det virker som om at de bliver slettet når jeg lukker browseren (FF-3), jeg kan nemlig ikke se dem med "Webdeveloper Extension" efter jeg har lukket og åbnet FF.

Cookiesne bliver oprettet sådan...
setcookie("login[brugernavn]", "$username");
setcookie("login[password]", "$password");

og udskrevet sådan...
$_COOKIE['login']['brugernavn']
$_COOKIE['login']['password']
Avatar billede erikjacobsen Ekspert
04. februar 2009 - 17:17 #13
Hvis du ikke sætter udløbsdato på er det "sessions-cookies", der udløber når browseren lukker. Kig på http://php.net/setcookie.

Og ja, en bruger kan ændre en cookie - selvfølgelig: den ligger jo på brugerens maskine.
Avatar billede andreas13_fam Nybegynder
04. februar 2009 - 17:37 #14
Tak nu virker det bare :D
Vil du have point, mod alt forventning.
Avatar billede erikjacobsen Ekspert
04. februar 2009 - 18:01 #15
:) nej tak
Avatar billede andreas13_fam Nybegynder
04. februar 2009 - 18:46 #16
Når men så kan du få et pent tak :)
OG godt med et link: jeg-samler-slet-ikke-paa-point-tak.erikjacobsen.com/ :D
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