Avatar billede sebast Nybegynder
21. august 2005 - 09:33 Der er 9 kommentarer og
1 løsning

Login sessions

Hej, jeg skal have lavet så når man opretter sin bruger logger den direkte ind. Desuden skal jeg også have sessions til og virke i mit loginsystem, så hvis jeg sagtens kan gå væk fra siden og så komme tilbage og stadig være logget på.

[opret.php]

<?php
function opret() {
    if($_POST[submit]) {
        $brugernavn = $_POST['brugernavn'];
        $firma = $_POST['firma'];
        $mail = $_POST['mail'];
        $kodeord = md5($_POST['kodeord']);
        $kodeord2 = md5($_POST['kodeord2']);
        $ip = $GLOBALS["REMOTE_ADDR"];
        $dato = time();
        $query = mysql_query("SELECT id, brugernavn, kodeord FROM admins") or die(mysql_error());
            while($foo = mysql_fetch_object($query)) {
                if(!eregi("^[a-zA-Z0-9_]{2,16}$", $brugernavn) || strtolower($foo->brugernavn) == strtolower($brugernavn)) {
                    $brugernavn = "fejl";
                } else {
                    $brugernavn = $brugernavn;
                }
            }

            if($brugernavn == "fejl" || $kodeord == "fejl" || $kodeord !== $kodeord2) {
                echo "<h1>Der er sket en fejl!</h1>";
            } else {
                mysql_query("INSERT INTO admins (brugernavn, kodeord, mail, firma, dato, ip) VALUES ('$brugernavn', '$kodeord', '$mail', '$firma', '$dato', '$ip')") or die(mysql_error());
                // skal logges direkte ind
            }
    }
}

if($_GET['valg'] == "opret") {
    opret();
} else {

// form

}
?>

[/opret.php]

[login.php]

<?php
session_start();
function login() {
    if($_POST[submit]) {
        $brugernavn = $_POST['brugernavn'];
        $kodeord = md5($_POST['kodeord']);
        $result = mysql_query("SELECT brugernavn, kodeord FROM admins WHERE brugernavn = '$brugernavn' AND kodeord = '$kodeord'") or die(mysql_error());
            if(mysql_num_rows($result) == 0) {
                $resultTest = mysql_query("SELECT brugernavn, kodeord FROM admins WHERE brugernavn = '$brugernavn'");

                // Hvis brugeren ikke eksisterer.
                if(mysql_num_rows($resultTest) == 0) {
                    echo "Ingen bruger eksisterer med dette brugernavn.";
                } else {
                    echo "Forkert brugernavn eller password.";
                }
            // Brugeren bliver logget ind.
            } else {
                while ($row = mysql_fetch_assoc($result)) {   
                    $brugernavn = $row['brugernavn'];
                }
                $_SESSION["brugernavn"] = $brugernavn;
                $_SESSION["id"] = session_id();
                echo "Hej ".$_SESSION['brugernavn'];
            }
    }
}

if($_GET['valg'] == "login") {
    login();
} else {

// form

}
?>

[/login.php]
Avatar billede jakobdo Ekspert
21. august 2005 - 11:52 #1
I din opret.php
skal du tilføje:
session_start(); i toppen.
Efter brugeren er oprettet, så du så lave:
$_SESSION["brugernavn"] = $brugernavn;
$_SESSION["id"] = session_id();
Avatar billede sebast Nybegynder
21. august 2005 - 12:00 #2
Nu er den logget ind, ja.

Hvordan retter jeg hvor længe sessionen skal leve osv.?

Der mangler kun lige loginsystemet.. Det skal ændres på en måde, så den istedet spørger om ens session findes og ikke som det er nu.

Men hvordan?
Avatar billede sebast Nybegynder
21. august 2005 - 12:01 #3
Kan jeg ikke få opret.php til og gå direkte til loginsystemet, og blive logget ind - så jeg kun skal rette et enkelt sted når det skal rettes?
Avatar billede jakobdo Ekspert
21. august 2005 - 12:10 #4
Levetid, det kan du sætte med: Du kan rette det i php.ini - (søg på session timeout)
Du kan evt også ændre det med denne kode direkte i dit script: session_set_cookie_params()

Om en bruger er logget ind, kan du tjekke på: if(isset($_SESSION['brugernavn']))

Du kan lave en funktion som hedder: login_ok($brugernavn)
Og den sætter så $_SESSION['brugernavn'] = $brugernavn og sender brugeren til f.eks. forsiden.
Avatar billede sebast Nybegynder
21. august 2005 - 12:11 #5
Gider du indsætte det i koden?

og læg også lige et svar.
Avatar billede jakobdo Ekspert
21. august 2005 - 12:23 #6
[opret.php]

<?php
session_start();
if($_GET['valg'] == "opret")
{
    opret();
}
else
{
    // form
}
?>

[/opret.php]

[login.php]

<?php
session_start();

if($_GET['valg'] == "login")
{
    login();
}
else
{
    // form
}
?>

[/login.php]

[funktion.php]

function loginOK($brugernavn)
{
    $_SESSION["brugernavn"] = $brugernavn;
    $_SESSION["id"] = session_id();
}

function login()
{
    if($_POST[submit])
    {
        $brugernavn = $_POST['brugernavn'];
        $kodeord = md5($_POST['kodeord']);
       
        $result = mysql_query("SELECT brugernavn, kodeord FROM admins WHERE brugernavn = '$brugernavn' AND kodeord = '$kodeord'") or die(mysql_error());
        if(mysql_num_rows($result) == 0)
        {
            $resultTest = mysql_query("SELECT brugernavn, kodeord FROM admins WHERE brugernavn = '$brugernavn'");

            // Hvis brugeren ikke eksisterer.
            if(mysql_num_rows($resultTest) == 0)
            {
                echo "Ingen bruger eksisterer med dette brugernavn.";
            }
            else
            {
                echo "Forkert brugernavn eller password.";
            }
        // Brugeren bliver logget ind.
        }
        else
        {
            while ($row = mysql_fetch_assoc($result))
            { 
                $brugernavn = $row['brugernavn'];
            }
           
            loginOK($brugernavn);
            echo "Hej ".$_SESSION['brugernavn'];
        }
    }
}

function opret()
{
    if($_POST[submit])
    {
        $brugernavn = $_POST['brugernavn'];
        $firma = $_POST['firma'];
        $mail = $_POST['mail'];
        $kodeord = md5($_POST['kodeord']);
        $kodeord2 = md5($_POST['kodeord2']);
        $ip = $GLOBALS["REMOTE_ADDR"];
        $dato = time();
       
        $query = mysql_query("SELECT id, brugernavn, kodeord FROM admins") or die(mysql_error());
        while($foo = mysql_fetch_object($query))
        {
            if(!eregi("^[a-zA-Z0-9_]{2,16}$", $brugernavn) || strtolower($foo->brugernavn) == strtolower($brugernavn))
            {
                $brugernavn = "fejl";
            }
        }

        if($brugernavn == "fejl" || $kodeord == "fejl" || $kodeord !== $kodeord2)
        {
            echo "<h1>Der er sket en fejl!</h1>";
        }
        else
        {
            mysql_query("INSERT INTO admins (brugernavn, kodeord, mail, firma, dato, ip) VALUES ('$brugernavn', '$kodeord', '$mail', '$firma', '$dato', '$ip')") or die(mysql_error());
            // skal logges direkte ind
            loginOK($brugernavn);
            header("LOCATION: index.php");
        }
    }
}

[/funktion.php]
Avatar billede sebast Nybegynder
21. august 2005 - 12:50 #7
og så skal der stå:

<?php
session_start();

echo "Hej ".$_SESSION["brugernavn"];
?>

i index.php?

Hvordan spørger man om session indeholder noget? altså om man er logget ind?
Avatar billede jakobdo Ekspert
21. august 2005 - 12:51 #8
F.eks.:
session_start();
if(isset($_SESSION['brugernavn']))
Avatar billede sebast Nybegynder
21. august 2005 - 12:53 #9
Selvom jeg lukker vinduet, ryger jeg ikke ud.

Lukker en session ikke altid når man lukker vinduet? :S
Avatar billede jakobdo Ekspert
21. august 2005 - 12:56 #10
Altså hvis du lukke browseren, så forsvinder session'en.
Men hvis du bare går til nyt vindue, så nej.
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