Logo - MyWebsolution.de
User gesamt  :  2389806
User online  :  3
KubaSeoTräume, PHP Forum, PHP Community and more ... MyWebsolution.de!
   
   
 
Registrieren Login User F.A.Q Suche Home

eingeloggt bleiben

MyWebsolution.de Foren » Workshops » logoutfunktion kenn plötzlich UserID nicht mehr...

Seite: 1 Posts pro Seite: 5 10 20
Autor Thread
10.05.2007 20:30 Uhr logoutfunktion kenn plötzlich UserID nicht mehr...
gutelaune75
Forenuser
registriert 13.04.2007
wohnt in bei Mainz ;o)
Beiträge 12
So langsam wird es peinlich wenn nur ich hier die Probleme beim lernen und probieren habe :oops:

Hmm, ich habe jetzt so viel rumprobiert und geändert das ich langsam selber den überblick verliere *lach* Also ich habe die Logoutfunktion und die autologoutfunktion jeweils in eigene php-dateien gepackt. Die autologout übrigens in die Fusszeile includet die immer bei seitenaufruf aktualisiert wird. Hoffe das ist richtig, scheint auch zu funktionieren ;)

Zum erstellen der Session habe ich in die index ganz oben die funktion eingetragen. Ist es ein Problem das die index auch eingeloggt zwischendurch aufgerufen wird? Alles so fragen so zwischendurch beim suchen der Fehlerursache...

Jetzt plötzlich klappt das ausloggen aber nicht mehr. Bzw. erst nachdem man 2 mal draufgeklickt hat. Und dann erscheint folgende Meldung unter der normalen anzeige der ausgeloggten Seite:


Notice: Undefined index: UserID in C:\xampp\htdocs\www\Bandseite\logout.php on line 25


Und das ist die logout.php:
PHP:

<?php

include("index.php");

include(
"verbindung.inc.php");

    
$connid = @mysql_connect($MYSQL_HOST$MYSQL_USER$MYSQL_PASS) OR die("Error: ".mysql_error());
    
mysql_select_db($MYSQL_DATA) OR die("Error: ".mysql_error());

    
// loggt einen User aus, ..
    
function doLogout()
    {
         
// .. indem das Cookie und ..
         
if(isset($_COOKIE['Autologin']))
             
setcookie("Autologin"""time()-60*60);
         
// .. die Session ID aus der Datenbank gelöscht werden
         
$sql "UPDATE
                           user
                 SET
                           SessionID = NULL,
                           Autologin = NULL,
                           IP = NULL

                 WHERE
                           ID = '"
.$_SESSION['UserID']."'
                "
;
         
mysql_query($sql) OR die("<pre>\n".$sql."</pre>\n".mysql_error());
    }

    
// User ausloggen
    
doLogout();
    
// $_SESSION leeren
    
$_SESSION = array();
    
// Session löschen
    
session_destroy();
    

 
?>



Zeile 25 ist die mit der Session['UserID']

Jetzt fragt mich bitte nicht wo die UserID denn eigentlich herkommt. Ich sag ja, ich hab kein Überblick mehr... :motz: Aber ich glaube die wird ja durch die session und die ID erstellt...

Bitte helft mir mal wieder auf die Sprünge...

LG
Markus
Profil ansehen Mail senden
11.05.2007 13:59 Uhr
Flitze
Administrator
registriert 17.10.2006
wohnt in Eschwege
Beiträge 332
$_SESSION['UserID'] wird beim einloggen erstellt. Damit kannst du prüfen, ob ein User eingeloggt ist.

PHP:
<?php
if(isset($_SESSION['UserID']))
    echo 
"Du bist wohl eingeloggt :)\n";
?>


Beim Ausloggen wird sie dann dementsprechend wieder vernichtet und zwar mit dem Code:

PHP:
<?php
        
// User ausloggen
        
doLogout();
         
// $_SESSION leeren => $_SESSION['UserID'] 'vernichten'
        
$_SESSION = array();
         
// Session löschen => Die Session-Datei vom Server löschen
        
session_destroy();
?>


Dein Problem tritt nun in der Funktion doLogout() auf:
PHP:
<?php
    
// loggt einen User aus, ..
    
function doLogout()
    {
         
// .. indem das Cookie und ..
         
if(isset($_COOKIE['AutologinM']))
             
setcookie("AutologinM"""time()-60*60);
         
// .. die Session ID aus der Datenbank gelöscht werden
         
$sql "UPDATE
                           User
                 SET
                           SessionID = NULL,
                           Autologin = NULL,
                           IP = NULL

                 WHERE
                           ID = '"
.$_SESSION['UserID']."'
                "
;
         
doQuery($sql);
    }
?>


Wie man sehen kann, wird die Funktion ohne Parameter aufgerufen (die Klammern hinter der Funktion sind leer). Das hat den Grund, dass ein Logout ja nur dann Sinn macht, wenn ein Benutzer auch eingeloggt ist und dementsprechend $_SESSION['UserID'] besitzt.

Aus deiner Aussage ergibt sich au schon der Problemansatz
Zitat:
Jetzt plötzlich klappt das ausloggen aber nicht mehr. Bzw. erst nachdem man 2 mal draufgeklickt hat.

Der Logout funktioniert sehr wohl beim ersten mal, $_SESSION wird gelöscht und die Session-Datei vernichtet. Aus irgendeinem Grund siehst du aber nicht, dass du ausgeloggt wurdest, also versuchst du ein zweitesmal, dich auszuloggen. Die Funktion doLogout() braucht aber wiederum die $_SESSION['UserID'], welche es aber nicht mehr gibt, weil du dich ja bereits vorher ausgeloggt hast. Dementsprechend kommt dann auch die Fehlermeldung zustande:

Zitat:
Notice: Undefined index: UserID in C:\xampp\htdocs\www\Bandseite\logout.php on line 25


Klar, es gibt keine $_SESSION-Element mehr, das UserID heißt.

Du kannst diese Aussagen mal überprüfen, indem du einmal auf Logout klickst, und dann auf irgendeine andere Seite außer Logout. Ich vermute, du bist dann trotzdem ausgeloggt.

Wenn das der Fall ist, dann ist es in der Tat ein Anzeigefehler, der vermutlich daraus entsteht, dass du 'oben' im Quellcode überprüfst (z.B. in deiner index.php) , ob ein User eingeloggt ist und den Logout erst darunter ausführst. Also in etwa so:

PHP:
<?php
if(isset($_SESSION['UserID']))
    echo 
"Du bist eingeloggt!\n";
/*
hier kommt weiterer Code
*/
// und hier kommt erst der Logout
    // User ausloggen
    
doLogout();
    
// $_SESSION leeren
    
$_SESSION = array();
    
// Session löschen
    
session_destroy();
?>


Es wird nun angezeigt:

Zitat:
Du bist eingeloggt!


Obwohl es eigentlich nicht stimmt, denn du wurdest ja ausgeloggt, siehst es aber erst danach. Aus diesem Grund stehen die Login- und Logout-Funktion bei mir immer ziemlich am Anfang des Index-Scriptes.

So, hoffe das hilft dir ;)
Gruß Flitze


Profil ansehen Mail senden
11.05.2007 19:20 Uhr
gutelaune75
Forenuser
registriert 13.04.2007
wohnt in bei Mainz ;o)
Beiträge 12
Hallo Flitze,

ich danke Dir und Du hast recht.
Jetzt erscheint es auch ganz logisch. Klar kommt dann diese Fehlermeldung wenn die UserID ja nicht mehr da ist :oops:

Ja, die index-datei beinhaltet praktisch die gesamte Seite mit all den Codes. Ich habe das Problem das ja die ganze Seite in Tabellen aufgeteilt ist und habe eigentlich alle Codes den Aufgaben entsprechend sortiert und nur noch überall includet. Eigentlich für die Übersichtlichkeit. Jetzt merke ich das ich genau diesen verloren habe *lol*

Okay, ich habe das include-index wieder, so hatte ich es vorher auch, unter die gesamte logoutfunktion gesetzt und bekomme jetzt ganz viele Fehlermeldungen die mir sagen das die Sessionvariabel und dadurch natürlich auch der Rest nicht gefunden werden kann. Also kein Logout mehr möglich...

Entweder ich begebe mich jetzt auf die Suche wo ich welche Codes falsch verschachtelt habe, oder ich schaffe es nach dem logout einfach die seite zu aktualisieren sodass auch normal angezeigt wird das man ausgeloggt ist, oder ich schreibe und sortiere die ganze Seite nochmal neu und lerne dabei wahrscheinlich am meisten...:rolleyes:

Grüsse
Markus
Profil ansehen Mail senden
11.05.2007 22:37 Uhr
gutelaune75
Forenuser
registriert 13.04.2007
wohnt in bei Mainz ;o)
Beiträge 12
Hmmm, ich habe gerade mal noch ein wenig getestet und das include-index wieder an das Ende des Codes geschoben. Gleichzeitig habe ich oben einfach mal nochmal einen session_start(); eingefügt. Und siehe da, jetzt geht es plötzlich.

PHP:

<?php
session_start
();
?>
<?php

include("verbindung.inc.php");

    
$connid = @mysql_connect($MYSQL_HOST$MYSQL_USER$MYSQL_PASS) OR die("Error: ".mysql_error());
    
mysql_select_db($MYSQL_DATA) OR die("Error: ".mysql_error());

    
// loggt einen User aus, ..
    
function doLogout()
    {
         
// .. indem das Cookie und ..
         
if(isset($_COOKIE['Autologin']))
             
setcookie("Autologin"""time()-60*60);
         
// .. die Session ID aus der Datenbank gelöscht werden
         
$sql "UPDATE
                           user
                 SET
                           SessionID = NULL,
                           Autologin = NULL,
                           IP = NULL

                 WHERE
                           ID = '"
.$_SESSION['UserID']."'
                "
;
         
mysql_query($sql) OR die("<pre>\n".$sql."</pre>\n".mysql_error());
    }

    
// User ausloggen
    
doLogout();
    
// $_SESSION leeren
    
$_SESSION = array();
    
// Session löschen
    
session_destroy();

include(
"index.php");
    
 
?>


Normalerweise gibt es doch nur einmal session_start(); ganz am Anfang... Lasse ich aber die in der Logout weg kann er auf die session nicht zugreifen. Durch den erneuten Aufruf dann aber schon...:oO:

Kann mir das jemand erklären?

Gruss
Markus
Profil ansehen Mail senden
12.05.2007 14:10 Uhr
Flitze
Administrator
registriert 17.10.2006
wohnt in Eschwege
Beiträge 332
naja, also da die Login-Funktion auf Sessions basiert, muss natürlich eine Session vorhanden sein. Deswegen muss session_start() auch immer am Anfang von jedem Script stehen. Ich weiß grad nicht, was bei dir
Zitat:
Normalerweise gibt es doch nur einmal session_start(); ganz am Anfang...
bedeutet.. Also bei mir sieht nen typischer Scriptanfang so aus:

PHP:
<?php
    
// Verbindung zur MySQL-Datenbank herstellen 
    
include "inc/mysql_connect.php";
    
// Konstanten / häufig gebrauchte Variablen definieren
    
include "inc/constants.php";
    
// selbstgeschriebene Funktionen defininiern
    
include "inc/functions.php";
    
// Session-Konfigurationseinstellungen (optional)
    
ini_set('session.use_trans_sid'0);
    
ini_set('session.use_cookies'1);
    
ini_set('session.use_only_cookies'1);
    
// Session starten
    
session_start();
    
// Login / Logout Funktionen
    
include "inc/login.php";
?>



Profil ansehen Mail senden
Seite: 1 no reply
Powered by Pascal Landau © 2006 MyWebsolution.de
Designed by Pascal Landau © 2006 MyWebsolution.de
 
 
 
 
Home Email Impressum Disclaimer Statistik