Avatar billede zaittam Nybegynder
21. juni 2004 - 20:58 Der er 10 kommentarer og
1 løsning

Sessions på eksisterende loginsystem

Jeg har et adminstrationssystem, som dog er meget dårligt sikret. Således kan man blot ved at skrive admin-filens adresse som URL komme derind. Jeg har gennem længere tid forsøgt mig frem med sessions, men kan ikek få det til at virke.

Jeg har nu denne kode, og vil gerne have en venlig sjæl til at kode det som så små og store bogstaver er ligemeget + en "secret file" hvor man ikke kan komme ind medmindre man har indtastet brugernavn og password, altså logget ind:

<?
include("../inc/db.php");

$query = mysql_query("SELECT * FROM superhosting_admins") or die(mysql_error());
while ($row = mysql_fetch_assoc($query)) {

if($row[navn] == $_POST[navn] AND $row[kode] == $_POST[kode]) {

$equery = mysql_query("SELECT * FROM superhosting_admins WHERE navn = '$_POST[navn]'") or die(mysql_error());
while ($e_row = mysql_fetch_assoc($equery)) {
$status = $e_row[status];

if($status == 1) {
include("menu.php");
echo "<br><center><table border=0 width=450 class=td_med_skygge><tr><td>Du er nu logget ind.</td></tr></table></center>";

} else {
echo "<br><center><table border=0 width=450 class=td_med_skygge><tr><td>Du kunne ikke logges ind.</td></tr></table></center>";
}

}
}
}
?>

Der må gerne følge en lille forklaring i sessions, og hvilke gruber man som regel falder i i starten, for jeg kan virkelig ikke finde ud af det og har aldrig kunnet..
Avatar billede retep Nybegynder
21. juni 2004 - 21:31 #1
Jeg har kodet det lidt om, håber du kan bruge det ;)

<?
include("../inc/db.php");

if (session_is_registered("sessionSuperAdminStatus")){
    if ($_SESSION["sessionSuperAdminStatus"] == 1){
        include("menu.php");
        echo "<br><center><table border=0 width=450 class=td_med_skygge><tr><td>Du er nu logget ind.</td></tr></table></center>";

    } else {
        echo "<br><center><table border=0 width=450 class=td_med_skygge><tr><td>Du kunne ikke logges ind.</td></tr></table></center>";
    }

} elseif (isset($_POST["navn"])  && isset($_POST["kode"]) && $_POST["kode"] != "" && $_POST["navn"] != ""){
   
    $navn = addslashes($_POST["navn"]);
    $kode = addslashes($_POST["kode"]);
   
    $sql = "select * from superhosting_admins where navn LIKE '$navn' and kode LIKE '$kode'";
    $res = mysql_query($sql) or die(mysql_error());
    if (mysql_num_rows($res) > 0){ // hvis der er en bruger
        $obj = mysql_fetch_object($res);
        session_register("sessionSuperAdminStatus");
        $_SESSION["sessionSuperAdminStatus"] = $obj -> status;
    }
   

} else {
    //lav en login form der poster til samme side her.

}
?>
Avatar billede retep Nybegynder
21. juni 2004 - 21:35 #2
Hov... Der skulle have været en header("Location: filnavn.php"); ind i midten!

Du får den lige med formfeltet også, så skal filen bare hedde index.php...
------
<?
include("../inc/db.php");

if (session_is_registered("sessionSuperAdminStatus")){
    if ($_SESSION["sessionSuperAdminStatus"] == 1){
        include("menu.php");
        echo "<br><center><table border=0 width=450 class=td_med_skygge><tr><td>Du er nu logget ind.</td></tr></table></center>";

    } else {
        echo "<br><center><table border=0 width=450 class=td_med_skygge><tr><td>Du kunne ikke logges ind.</td></tr></table></center>";
    }

} elseif (isset($_POST["navn"])  && isset($_POST["kode"]) && $_POST["kode"] != "" && $_POST["navn"] != ""){
   
    $navn = addslashes($_POST["navn"]);
    $kode = addslashes($_POST["kode"]);
   
    $sql = "select * from superhosting_admins where navn LIKE '$navn' and kode LIKE '$kode'";
    $res = mysql_query($sql) or die(mysql_error());
    if (mysql_num_rows($res) > 0){ // hvis der er en bruger
        $obj = mysql_fetch_object($res);
        session_register("sessionSuperAdminStatus");
        $_SESSION["sessionSuperAdminStatus"] = $obj -> status;
    }
    header("Location: index.php");

} else {
    //lav en login form der poster til samme side her.
    ?>
        <form action="index.php" method="post">
            <input type="text" name="navn">
            <input type="text" name="kode">
        </form>

   
    <?
}
?>
Avatar billede zaittam Nybegynder
21. juni 2004 - 21:37 #3
Dét der forstår jeg altså ikke.

er der ikke en mindre fil jeg kan smide ind hvor jeg sikrer mine filer? Jeg har trods alt omkring 50 adminstrationsfiler :S
Avatar billede retep Nybegynder
21. juni 2004 - 21:55 #4
Det der kan du bruge som login siden... (omdøb den f.eks. til login.php)

På alle de andre sider kan du jo så bare spørge:
if (!session_is_registered('sessionSuperAdminStatus')){
header("location: login.php");
}

i toppen af filen.
Avatar billede zaittam Nybegynder
21. juni 2004 - 21:58 #5
Altså:

Hvis session er registreret skal den viderestille til login-siden? :S
Avatar billede retep Nybegynder
21. juni 2004 - 22:15 #6
Nej, hvis den ikke er registreret skal den ryge til login siden :)
Avatar billede zaittam Nybegynder
21. juni 2004 - 23:21 #7
hovsa.. Jeg så ikke lige udråbstegnet :) Jeg vil lige prøve det :D
Avatar billede zaittam Nybegynder
21. juni 2004 - 23:33 #8
Den viser bare loginfelterne igen, selvom jeg logger ind med rigtigt navn og kode..:S
Avatar billede zaittam Nybegynder
22. juni 2004 - 13:54 #9
Hjælp :D
Avatar billede zaittam Nybegynder
24. juni 2004 - 13:26 #10
retep?
Avatar billede zaittam Nybegynder
26. juni 2004 - 13:51 #11
Fint så.
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