Avatar billede 1409 Praktikant
14. september 2005 - 13:43 Der er 13 kommentarer og
1 løsning

session - log ud problem

Jeg har følgende login.php:

ECHO "<FORM NAME=\"Login\" METHOD=\"POST\" ACTION=\"loginTest.php\">\n";
ECHO "<TR><TD>Brugernavn:<INPUT TYPE=\"text\" SIZE=\"12\" MAXLENGTH=\"12\" NAME=\"Brugernavn\"></TD></TR>\n";

ECHO "<TR><TD>Password:<INPUT TYPE=\"password\" SIZE=\"12\" MAXLENGTH=\"12\" NAME=\"Password\"></TD></TR>\n";

ECHO "<TR><TD><INPUT TYPE=\"submit\" NAME=\"Submit\" VALUE=\"Login\"></TD></TR>\n";
ECHO "</FORM>\n";

loginTest.php følger:

<?php
session_start();
INCLUDE("../includes/db_vari.php");
$conn = MYSQL_CONNECT($host,$user,$password) OR DIE($c_error);
MYSQL_SELECT_DB($database) OR DIE($s_error);

IF(!isset($_POST['Submit'])) { //Tester om brugeren kom fra login.php
    header("Location:login.php");
    }
    ELSE{
        $postbruger = $_POST['Brugernavn'];
        $postpass = $_POST['Password']; //For læservenligheden overføres post variablerne til normale variabler
       
        $resultat = MYSQL_QUERY("SELECT brugerID FROM `brugere` WHERE brugerNavn = '$postbruger' AND brugerPass = '$postpass'");//Spørger efter ID

        $number = mysql_num_rows($resultat);//Tæller antaller af resultater
        IF($number == 1) { //Hvis der kun er et resultat, bliver brugeren logget in
            $_SESSION['loget_in'] = 1;
            $_SESSION['brugerNavn'] = $postbruger;
            $_SESSION['brugerPass'] = $postpass; //Sætter session variablerne
            header("Location:index.php");

        }
        ELSE {
            $mess = "Forkerte oplysninger!";
            header("Location:login.php?mess=$mess");
        }
    }
?>

I toppen af index.php er dette:

session_start();
if(!$_SESSION['loget_in'] == 1) {//Hvis brugeren ikke er logget in
    header("Location:login.php");//Sender brugeren videre
    exit;//Sørger for at resten af koden, ikke bliver udført
}

So far, so good.

Problemet er, at følgende log-ud ikke virker.
På index.php er denne stump:
ECHO "<TR><TD><A HREF=\"logud.php?logaf=logaf\">Log ud</A></TD></TR>\n";

logud.php ser sådan ud:
<?PHP
// Logger ud og sender videre
IF(isset($_GET['logaf'])){
    unset($_SESSION['loget_in']);
    unset($_SESSION['postbruger']);
    unset($_SESSION['postpass']);
    header("Location:login.php");
    exit;
}
?>

Men tilsyneladende dræbes sessionen ikke, for jeg kan efterfølgende gå ind på index.php uden at blive sendt til login.php (medmindre jeg først lukker browseren), hvilket jo netop ikke burde kunne lade sig gøre...

På forhånd tak
PS. Det er stærkt inspireret af en glimrende artikel på udvikleren.dk
Avatar billede pr1nsen Nybegynder
14. september 2005 - 13:45 #1
logud.php ser sådan ud:
<?PHP
// Logger ud og sender videre
IF(isset($_GET['logaf'])){
    session_destroy();
    header("Location:login.php");
    exit;
}
?>
Avatar billede pr1nsen Nybegynder
14. september 2005 - 13:45 #2
det dræber godt nok alle sessions, men går ud fra det er lige meget? :-)
Avatar billede jaw Nybegynder
14. september 2005 - 13:54 #3
Og hvad spørger du så om? Om det er ok at bruge session_destroy()? Ja, det er ok :)
Avatar billede 1409 Praktikant
14. september 2005 - 13:59 #4
Jeg ændrede til pr1nsen's forslag, men får denne fejl:

Warning: Trying to destroy uninitialized session in d:\foxserv\www\yyy\intranet\logud.php on line 4

Warning: Cannot add header information - headers already sent by (output started at d:\foxserv\www\yyy\intranet\logud.php:4) in d:\foxserv\www\yyy\intranet\logud.php on line 5
Avatar billede pr1nsen Nybegynder
14. september 2005 - 13:59 #5
Jeps, det var det jeg spurgte om :-)
Avatar billede jaw Nybegynder
14. september 2005 - 14:00 #6
Ahhh, troede faktisk at I to var samme person, havde ikke lige set navneforskellen :D

Smid session_start() ind, så burde fejlen forsvinde...
Avatar billede 1409 Praktikant
14. september 2005 - 14:15 #7
Fedest. Ved at ændre scriptet til dette, så virker det:
<?PHP
session_start();
// Logger ud og sender videre
IF(isset($_GET['logaf'])){
    session_destroy();
    header("Location:login.php");
    exit;
}
?>

Men er det muligt kun at dræbe dennne session, og ikke alle?
Avatar billede jaw Nybegynder
14. september 2005 - 14:17 #8
Ja, det burde unset($_SESSION['variabel']) som du havde i starten gøre. Prøv at smide session_start() i dén og se, om det så ikke klarer jobbet for dig.
Avatar billede pr1nsen Nybegynder
14. september 2005 - 14:20 #9
det er fordi dit output står UNDER <html>
smid det over det, ellers kan man snyde lidt :-)

i starten af din index.php fil, eller hvad du nu arbejder med, skriver du:
ob_start();
og aller nederst, skriver du ob_end_flush();
Avatar billede pr1nsen Nybegynder
14. september 2005 - 14:22 #10
ok glem hvad jeg skrev, læste ikke du havde fået løst det problem :-(
- tror det er godt, at jeg snart har fri ;-)
Avatar billede 1409 Praktikant
14. september 2005 - 14:25 #11
Desværre nej. Problemet opstår igen :-/

session_start();
// Logger ud og sender videre
IF(isset($_GET['logaf'])){
    unset($_SESSION['loget_in']);
    unset($_SESSION['postbruger']);
    unset($_SESSION['postpass']);
    header("Location:login.php");
    exit;
}
Avatar billede jaw Nybegynder
14. september 2005 - 14:26 #12
i login:
    $_SESSION['loget_in'] = 1;
    $_SESSION['brugerNavn'] = $postbruger;
    $_SESSION['brugerPass'] = $postpass; //Sætter session variablerne
i logout:
    unset($_SESSION['loget_in']);
    unset($_SESSION['postbruger']);
    unset($_SESSION['postpass']);

Du har da lidt en forskel i navnene på variablerne...?!
Avatar billede 1409 Praktikant
14. september 2005 - 15:10 #13
>>jaw
Ups...

Nu virker det perfekt.
Det krævede dog også, at jeg rettede en "fejl" i php.ini. Jeg bruger php version 4.1.1. Af uforståelige grunde var register_globals = On, men burde sandelig være Off :-o

session_start();
// Logger ud og sender videre
IF(isset($_GET['logaf'])){
    unset($_SESSION['loget_in']);
    unset($_SESSION['brugerNavn']);
    unset($_SESSION['brugerPass']);
    header("Location:login.php");
    exit;
}

Jeg vil gerne give både jaw og pr1nsen point, så smid et par svar :-)
Avatar billede jaw Nybegynder
14. september 2005 - 15:22 #14
Oki doki :)
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