tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
7
ZUGRIFFE
339
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    jackie05 jackie05 ist offline Mitglied Brokat
    Registriert seit
    Feb 2005
    Beiträge
    293
    Hallo,
    ich habe folgendes Problem und zwar wenn sich ein User einloggt, dann soll die Session gespeichert werden.

    Das ist kein Problem, folgender Code funktioniert:
    PHP-Code:
        //Einloggen
        
    if ($_REQUEST['act'] == "login") {
            
    session_register('username');
            
    $_SESSION["user"] = $username;

            
    $username=$_REQUEST['username'];
            
    $password=md5($_REQUEST['passwort']);
            
    $query "SELECT COUNT(*) FROM users where username = '".$username."' and password = '".$password."'";
            
    $login mysql_fetch_array(mysql_query($query));

            if (
    $login[0] > 0) {
                echo 
    "1";
            } else {
                echo 
    "<font color='#FF0000'>Benutzername oder Passwort falsch!</font>";
            }
        } 
    Aber die Sessions sollen erst gespeichert werden, wenn der User sich erfolgreich eingeloggt hat, also in Zeile 11, das Problem ist, das wenn ich die Zeile 3 und 4:
    PHP-Code:
            session_register('username');
            
    $_SESSION["user"] = $username
    in die if anweisung:
    PHP-Code:
    if ($login[0] > 0) { 
    verschiebe, dann funktioniert das nicht mit der Session, also er speichert sie garnicht.
    Er speichert sie nur, wenn ich die zeile 3 und 4 dort lasse, wo sie sich gerade befinden.

    Weiss jemand von euch, wieso das nicht funktioniert, wenn ich Zeile 3 und 4 in diese if anweisung:
    PHP-Code:
    if ($login[0] > 0) { 
    verschiebe?

    Ich danke euch schonmal für die Hilfe.

    MfG
     

  2. #2
    Joe Joe ist offline Mitglied Brokat
    Registriert seit
    Aug 2009
    Ort
    Thüringen
    Beiträge
    339
    Hallo,

    ist ja ein seltsames Verhalten. Wird denn sonst das echo "1"; ausgegeben?
    Ansonsten könnte ich mir nur vorstellen das das session_start() fehlt. Das wird auf jeder Seite wo du mit session arbeitest am Anfang benötigt.

    gruss joe.
     

  3. #3
    jackie05 jackie05 ist offline Mitglied Brokat
    Registriert seit
    Feb 2005
    Beiträge
    293
    Danke Dir.
    session_start(); befindet sich bei mir am anfang der Datei, ich hab ja nur ein Code ausschnitt von mir gepostet.
    Ich hab ein Login-Script mit ajax geschrieben und wenn sich ein User einloggt, dann funktioniert es, nur wenn man die Seite wieder aktualisiert, dann ist die Session verschwunden.
    echo "1" wird ausgegeben, ich hab es mit HttpFox gesnifft und gekuckt wie sich die daten verhält.
    Über jquery öffne ich folgende Seite, wenn sich ein User einloggt:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
    function login() {
        $.get('register/register.php', {act:'login', username:document.f.username.value, passwort:document.f.passwort.value}, 
        function(data) {
            if (data == "1") {
                $("#regform").load("register/registerform.php?login=1");
            } else {
                $('div#hs').html(data);
            }
        });
    }
    und das wird dann ausgeführt in der PHP:
    PHP-Code:
        include('connect.php');
        
    session_start();

        
    //Einloggen
        
    if ($_REQUEST['act'] == "login") {
            
    session_register('username');
            
    $_SESSION['user'] = $username;
            
    $username=$_REQUEST['username'];
            
    $password=md5($_REQUEST['passwort']);

            
    $query "SELECT COUNT(*) FROM users where username = '".$username."' and password = '".$password."'";
            
    $login mysql_fetch_array(mysql_query($query));

            if (
    $login[0] > 0) {
                echo 
    "1";
            } else {
                echo 
    "<font color='#FF0000'>Benutzername oder Passwort falsch!</font>";
            }
        } 
    ich hab gleich die Zeile bis oben mit Kopiert, hier sieht man ja, das ich session_start(); verwende.

    Ich hab diesen Code von PHP mal in der Adresszeile getestet und mir ist aufgefallen, das wenn ich die SESSION an einer anderen Position verwende, z.B. ein Paar Zeilen runter, dann werden die SESSION gelöscht also die sind dann einfach nicht mehr da.
    Wenn ich die SESSION an dieser Position lasse, dann werden die SESSION gespeichert, soetwas habe ich noch nicht erlebt.
    Ich habe keine ahnung an was es liegen könnte.

    Ich hoffe, dass mir jemand Weiterhelfen könnte

    Danke schonmal.

    MfG
     

  4. #4
    Joe Joe ist offline Mitglied Brokat
    Registriert seit
    Aug 2009
    Ort
    Thüringen
    Beiträge
    339
    Die Funktion session_register() ist veraltet und wird in keiner Weisse mehr empfohlen.
    http://www.php.net/manual/de/functio...n-register.php

    Dabei fällt mir auf du registrierst etwas anders als du nutzen willst.
    PHP-Code:
            session_register('username');
            
    $_SESSION["user"] = $username
    $_SESSION["user"] müsste nun deinen $usernamen haben auch wenn du das ans Ende des scriptes setzt. Wo hingegen $_SESSION["username"] unnötig registriert wurde und dazu noch leer ist. Vieleicht daher die Probleme?
     

  5. #5
    jackie05 jackie05 ist offline Mitglied Brokat
    Registriert seit
    Feb 2005
    Beiträge
    293
    Danke Dir.
    Irgendwie bleibt er jetzt die ganze Zeit eingeloggt, ich kann noch nicht einmal die SESSION löschen:
    PHP-Code:
        if ($_REQUEST['act'] == "logout") {
            unset(
    $_SESSION['user']);
            echo 
    "Ausgeloggt";
        } 
    Der echo befehl wird ausgeführt, aber die SESSION lässt sich garnicht löschen, kann das nicht weiter testen, wenn ich die SESSION nicht mehr gelöscht bekomm.

    Woran könnte das liegen?
    Edit: Es geht wieder so wie vorher, er speichert einfach nicht die Session.

    MfG
    Geändert von jackie05 (15.12.11 um 23:00 Uhr)
     

  6. #6
    Joe Joe ist offline Mitglied Brokat
    Registriert seit
    Aug 2009
    Ort
    Thüringen
    Beiträge
    339
    Um alle Session-Daten der Sitzung zu löschen, benutzt man session_destroy()

    <?php
    session_destroy();
    ?>

    Dieser Befehl löscht alle Daten der Session.

    Um eine einzelne Session zu deaktivieren, benötigt man unset

    <?php
    unset($_SESSION['user']);
    ?>

    Dieser Befehl löscht die Werte für die Session-Variable user.
    http://www.php-einfach.de/php-tutorial/php-sessions.php

    Die Session selbst exitiert bei dir also noch nur das der Name nun nicht mehr drinnen ist. Je nachdem was falsch läuft kanns passieren das es direckt durch dein Script wieder gefüllt wird.
    Anders gesagt es kommt drauf an wie geprüft wird ob man noch eingeloggt ist oder nicht. Oder wie dein Script weiterleitet falls die Session noch existiert.
     

  7. #7
    Avatar von the snake II
    the snake II the snake II ist offline Mitglied Gold
    Registriert seit
    Sep 2004
    Ort
    Krefeld
    Beiträge
    132
    Versuch mal deinen Browsercache von möglichen Cookie-Leichen zu befreien, welche verhindern könnten, dass deine Session-ID gespeichert wird.
     

  8. #8
    jackie05 jackie05 ist offline Mitglied Brokat
    Registriert seit
    Feb 2005
    Beiträge
    293
    Danke euch.
    Der Fehler lag ganz woanders, ich prüfe ja immer ob der User eingeloggt ist:
    PHP-Code:
        if ($_REQUEST['act'] == "check_login") {
            if (!isset(
    $_SESSION['user'])) {
                echo 
    "0";
            } else {
                echo 
    "1";
            }
        } 
    Wenn ja, dann kommt 1 zurück, wenn nein, dann die 0.
    Ich hatte es vertauscht gehabt, also so:
    PHP-Code:
        if ($_REQUEST['act'] == "check_login") {
            if (!isset(
    $_SESSION['user'])) {
                echo 
    "1";
            } else {
                echo 
    "0";
            }
        } 
    Damit ging es ja nicht, er hat dann immer 0 zurück gegeben, obwohl man eingeloggt war, deswegen ging es ja nicht, da ich ja bei den werten verschiedene Div Container lade, bei 0 = Loginformular, bei 1 = Willkommen Seite.

    Jetzt funktioniert es, trotzdem, vielen Dank für die Hilfe.

    MfG
     

Ähnliche Themen

  1. Antworten: 3
    Letzter Beitrag: 07.04.10, 00:38
  2. $_SESSION[] Probleme
    Von dg87 im Forum PHP
    Antworten: 2
    Letzter Beitrag: 08.10.07, 14:53
  3. Probleme mit $_SESSION
    Von zempsit im Forum PHP
    Antworten: 0
    Letzter Beitrag: 13.10.06, 21:23
  4. $_SESSION-Problem
    Von vaporizer im Forum PHP
    Antworten: 3
    Letzter Beitrag: 27.07.04, 21:50
  5. $_SESSION und 2D-Array
    Von Wolfsbein im Forum PHP
    Antworten: 2
    Letzter Beitrag: 14.02.03, 20:57