Ankündigung

Einklappen
Keine Ankündigung bisher.

PHP - Cookie problem

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • PHP - Cookie problem

    Also, ich arbeite an einem Login System das Cookies erfordert.

    Aber wenn ich mich einloggen will steht da immer "Bitte schalte Cookies ein!" (Also, der Text der ausgegeben werden soll wenn Cookies deak. sind.) Aber ich habe Cookies aktiviert .

    Hier mal die Codes:

    login.php
    PHP-Code:
    <?php
    $status_no 
    "<p>Nicht eingeloggt!</p>";
    $status_yes "<p>Status: eingeloggt - <a href='{$_SERVER['PHP_SELF']}?logoff=1'>Ausloggen?</a></p>";
    include 
    "zugriff.inc.php";
    include 
    "loginmaker.inc.php";
    include 
    "logoffmaker.inc.php";
    ?>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <title>Einloggseite</title>
    <meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
    <link rel="stylesheet" type="text/css" href="phpkid.css">
    </head>
    <body>
    <div>Startseite - <a href="seite1.php">Seite 1</a> - <a href="seite2.php">Seite 2</a> - <a href="seite3.php">Seite 3</a></div>
    <h1>Willkommen auf der Startseite</h1>
    <?php
    if (isset($_SESSION['login']) && $_SESSION['login'] === true) {
    echo 
    $status_yes;
    } else {
    echo 
    $status_no;
    }
    echo <<<FORMULAR
    <form action="{$_SERVER['PHP_SELF']}" method="post">
    Nickname:&nbsp;<input type="text" name="user"><br />
    Passwort:&nbsp;<input type="password" name="pw"><br /><br />
    <input type="submit" value=" Absenden ">
    </form>
    FORMULAR;
    ?>
    </body>
    </html>
    loginmaker.inc.php:
    PHP-Code:
    <?php
    if (!empty($_POST['user']) && !empty($_POST['pw'])) {
    if (
    SID != "") { // SID ungleich Leerstring
    $status_no "<p>Bitte schalte Cookies ein!</p>";
    } else {
    $user trim($_POST['user']);
    $pw trim($_POST['pw']);
    $pw md5($pw);
    $loginsql "SELECT user, pw FROM userlogin WHERE user='$user' AND pw='$pw'";
    $result mysql_query($loginsql);
    if (
    mysql_num_rows($result) == 1) {
    $_SESSION['login'] = true;
    $status_yes "<p>Du bist eingeloggt als <strong>$user</strong>!</p>";
    } else {
    $_SESSION false;
    $status_no "<p>Einloggdaten nicht korrekt!</p>";
    }
    }
    }
    ?>
    logoffmaker.php:
    PHP-Code:
    <?php
    if (isset($_GET['logoff']) && $_GET['logoff'] == 1) {
    session_unset();
    if (isset(
    $_COOKIE['PHPSESSID'])) {
    setcookie("PHPSESSID"""time()-86400);
    }
    session_destroy();
    }
    ?>

  • #2
    Hallo,

    willst du nicht eher prüfen, ob SID == "" ist statt != "", um herauszufinden, ob der User KEINE Cookies aktiviert hat?

    Im Übrigen kannst du dir das Löschen des Session-Cookies sparen. Viel wichtiger ist, dass du das Session-Array leerst und die Session löschst:
    PHP-Code:
    session_destroy();
    $_SESSION = array(); 
    Ach, noch etwas: damit du es nicht falsch verstehst: es ist nicht möglich, in einem Rutsch zu erkennen, ob Cookies gesetzt werden können. Das Cookie wird immer an den Client gesendet und erst beim nächsten Skript-Aufruf kann geprüft werden, ob es auch gespeichert, also angenommen wurde. Deshalb wird SID beim ersten Aufruf in jedem Fall (auch wenn Cookies aktiviert sind) PHPSESSID=... zurückgeben.
    Refining Linux: “[url=http://www.refining-linux.org/archives/65/Performing-push-backups-Part-1-rdiff-backup/]Performing Push Backups – Part 1: rdiff-backup[/url]”

    Kommentar


    • #3
      Hi,

      ich weiß nicht in wie weit du das Script auf wichtige Stellen gekürzt hast, aber es fehlt überall session_start(). Sollte das bei dir drinne sein in der Original File, ignoriere diese 2 Sätze.

      Setze doch in der login.php mit setcookie einen Testcookie, wenn dieser in der loginmaker.inc.php abrufbar ist, ist mit hoher wahrscheinlichkeit Cookies erlaubt, oder der User hat ihn einmalig akzeptiert.

      Kommentar


      • #4
        Zitat von Manko10 Beitrag anzeigen
        Hallo,

        willst du nicht eher prüfen, ob SID == "" ist statt != "", um herauszufinden, ob der User KEINE Cookies aktiviert hat?

        Im Übrigen kannst du dir das Löschen des Session-Cookies sparen. Viel wichtiger ist, dass du das Session-Array leerst und die Session löschst:
        PHP-Code:
        session_destroy();
        $_SESSION = array(); 
        Ach, noch etwas: damit du es nicht falsch verstehst: es ist nicht möglich, in einem Rutsch zu erkennen, ob Cookies gesetzt werden können. Das Cookie wird immer an den Client gesendet und erst beim nächsten Skript-Aufruf kann geprüft werden, ob es auch gespeichert, also angenommen wurde. Deshalb wird SID beim ersten Aufruf in jedem Fall (auch wenn Cookies aktiviert sind) PHPSESSID=... zurückgeben.
        Zitat von Lyrone Beitrag anzeigen
        Hi,

        ich weiß nicht in wie weit du das Script auf wichtige Stellen gekürzt hast, aber es fehlt überall session_start(). Sollte das bei dir drinne sein in der Original File, ignoriere diese 2 Sätze.

        Setze doch in der login.php mit setcookie einen Testcookie, wenn dieser in der loginmaker.inc.php abrufbar ist, ist mit hoher wahrscheinlichkeit Cookies erlaubt, oder der User hat ihn einmalig akzeptiert.
        Da liegt ihr beide falsch . Ich benutze die Codes aus dem Buch "PHP & MySQL für Kids - Praxisbuch" (von JCH).

        SID != "" soll also prüfen ob SID einen Leerstring erhält .


        Die session_start(); liegt in der "sessionheader.inc.php".

        Im übrigen mein Problem hat sich erledigt.

        - Mod can closen -

        Kommentar


        • #5
          Zitat von Nickname Beitrag anzeigen
          SID != "" soll also prüfen ob SID einen Leerstring erhält .
          Ja, gut, okay. Falsch herum gedacht.
          Aber ich denke, dass es immer guter Brauch ist, seine Lösungen zu posten.
          Refining Linux: “[url=http://www.refining-linux.org/archives/65/Performing-push-backups-Part-1-rdiff-backup/]Performing Push Backups – Part 1: rdiff-backup[/url]”

          Kommentar

          Lädt...
          X