Antworten auf deine Fragen:
Neues Thema erstellen

Antworten zum Thema „Session Problem“

leg0lyZe

Noch nicht viel geschrieben

Hi,
ich hab ein Problem in einem Script:

Und zwar sollte nach diesem Befehl

HTML:
<a href="index.php?section=admin&action=logout">log out </a>

die Session in diesem Script gelöscht (destroyed) werden:

PHP:
<?php
    if(isset($_GET['action']) AND ("logout" == $_GET['action'])) {
        session_destroy();
        echo "<p>\n";
        echo "    Sie haben sich ausgeloggt. Um wieder in den Adminbereich\n";
        echo "    zu kommen müssen sie sich wieder <a href=\"index.php?section=admin&amp;userID=0\">Einloggen</a>\n";
        echo "</p>\n";
        
	} else {
        if(isset($_POST['UserID']) AND '0' == $_POST['UserID']) {
            echo "<p>\n";
            echo "    Bitte wählen sie einen Benutzernamen aus.\n";
            echo "</p>\n";
        } else {
            if(isset($_POST['UserID'], $_POST['Password']) AND
               login_right(addslashes($_POST['UserID']),
                           addslashes($_POST['Password']))) {
                $_SESSION['ID'] = $_POST['UserID'];
            }

            if(isset($_SESSION['ID'])) {
                
                if(isset($_GET['site']) AND isset($admin_site[$_GET['site']])) {
                    include($admin_site[$_GET['site']]);
                } else {

                    //
                    // Reste in der Session löschen
                    //
 
                     $_SESSION = array('ID' => $_SESSION['ID'],
                                      'IP' => $_SESSION['IP']);
 
                    include "admin_menu.php";
                    // Das Hauptmenu vom Adminbereich laden
                 }				
			
            } else {
                echo "<p class=\"error\">\n";
                echo "    Falsches Password\n";
                echo "</p>\n";
            }
        }
    }
?>

Es kommt dann auch die erwünschte Ausgabe:
Sie haben sich ausgeloggt. Um wieder in den Adminbereich zu kommen müssen sie sich wieder Einloggen

Wenn ich dann aber i-was machen will kommt wieder die else-Meldung:
falsches passwort


Also Fakt ist eigentlich, dass ich aus dieser Session nicht mehr rauskomm, bzw ich mich nichtmehr neu einloggen kann,d.h. ich kann das ganze Script nicht so richtig ausprobieren.
Ist aus folgendem Tut:

Ich hoffe ihr versteht das Problem, wenn nicht fragt bitte nochmal nach.
MfG
leg0lyZe
 

Refus

aka Noisy

AW: Session Problem

Na du fragst ab ob $_SESSION['ID'] gesetzt ist, da die Session zerstört wurde, ist diese natürlich nicht gesetzt und so kommt es zu der Ausgabe.
 

leg0lyZe

Noch nicht viel geschrieben

AW: Session Problem

aber ich glaube ich habe das problem. wenn ich ein formular mit
UserID
Password
schreibe müsste der Teil den ich möchte ja eig kommen oder?

Also so was

<form method="post" action="index.php?section=admin&amp">
<table style="border:0; width:20%;" cellpadding="0" cellspacing="0">
<tr>
<td>Name ID </td>
<td><input type="text" name="UserID" /></td>
</tr>
<tr>
<td>pw </td>
<td><input name="Password" type="password" /></td>
</tr>
<tr>
<td class="tdleft" style="text-decoration:none;">Option:</td>
<td><input type="submit" name="submit" value="submit" /></td>
</tr>
</table>
</form>
 
Zuletzt bearbeitet:

saila

Moderatorle

AW: Session Problem

Da kann es zwei Ursachen geben. Die eine - was macht diese Funktion login_right(); Funktioniert der Login und sind die übergebenen Daten korrekt mit dem DB Inhalt?

Wobei - was soll vor einer UserID ein addslashes, wenn intval() sinniger wäre und das Passwort bräuchte kein addslashes, würde danach in md5(); gewandelt. Somit wäre das eine schon größere Sicherheitslücke im Script.

Und zu deinem Problem - wie schon Refus darauf verwiesen hat, erwartest du für das Setzen einer Session eine Session-id. Diese gibt es aber vor einer erfolgreichen Loginanfrage nicht. Somit wird das Script immer auf einen Passwortfehler verweisen.
 

CIX88

Aktives Mitglied

AW: Session Problem

Solange wie session_start() gar nicht gesetzt ist, wird bei der Session-Abfrage auch nicht viel passieren.

Erst session_start(), dann nach Session abfragen, und dann erst Session löschen ...
 

leg0lyZe

Noch nicht viel geschrieben

AW: Session Problem

Das ist die Funktion Log_in Right
PHP:
<?php    
function login_right($id, $pass)    {       
     $sql = "SELECT 
                    COUNT(*) as Anzahl
                FROM 
                    users 
               WHERE       
                    ID = '".$id."' AND  Password = MD5('".$pass."');";
        $result = mysql_query($sql) OR die(mysql_error());
        $row = mysql_fetch_assoc($result);
        mysql_free_result($result);
        return $row['Anzahl'];    }?>

Ich bin im Moment aufgeschmissen, da ich mich einfach nicht einloggen kann und somit das Script nicht testen kann ob es klappt
 

saila

Moderatorle

AW: Session Problem

Vorausgesetzt jede Seite hat session_start(); zu Beginn, dann würde ich dir empfehlen als ersten Check folgendes nach session_start(); einzubinden:

PHP:
<?php
foreach( $_REQUEST AS $K => $V ) { echo "$K -> $V<br>"; }
foreach( $_SESSION AS $K => $V ) { echo "$K -> $V<br>"; }
?>

Damit kannst du testen, was alles vorhanden oder übergeben wurde. Zudem die Frage, ist $_GET['site'] überhaupt vorhanden?
 

leg0lyZe

Noch nicht viel geschrieben

AW: Session Problem

Es läuft ja alles über die index.php (index.php?section=xy)

Das steht in der index.php
PHP:
<?php  //index.php    

error_reporting(E_ALL); 
	include "inc/config.php"; // die Konfigurationsdateien lesen.
    include "inc/connect.php";

    @mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASS) OR die(mysql_error());
    mysql_select_db(MYSQL_DATABASE) OR die(mysql_error());

    // Session starten wenn ?section=admin geöffnet wurde
    if(isset($_GET['section']) AND ("admin" == $_GET['section'])) {
        session_start();
        if(!isset($_SESSION['IP'])) {
            $_SESSION['IP'] = $_SERVER['REMOTE_ADDR'];
        }
        if($_SESSION['IP'] != $_SERVER['REMOTE_ADDR']) {
            echo "<p class=\"error\">\n";
            echo "    Sie dürfen nicht die Session von einem\n";
            echo "    anderen user Benutzten. Bitte benutzen sie\n";
            echo "    folgenden Link um zur Homepage zu gelangen.\n";
            echo "    <a href=\"/\">Zurück zur Homepage</a>\n";
            echo "</p>\n";
            die(); // Aus Sicherheitsgründen die Abarbeitung sofort beenden
        }
    }

    if(get_magic_quotes_gpc()) {
        array_stripslashes($_GET);
        array_stripslashes($_POST);
        array_stripslashes($_COOKIE);
    }

// .... html head body ...

?>

Wo sollte site definiert sein? die brauche ich doch nicht oder?
 

saila

Moderatorle

AW: Session Problem

Na wenn per GET nicht site übergeben wird, wird keine Adminseite includiert. Aber bevor nicht die Session eine UserID erhalten hat, geht da eh nichts. Ergo musst du eben prüfen, ob eine Session mit userid existiert und deshalb foreach.
 

leg0lyZe

Noch nicht viel geschrieben

AW: Session Problem

Also ich bekomme immer eine section-id angezeigt:

PHP:
<?php
    // die admin.php

		foreach( $_REQUEST AS $K => $V ) { echo "$K -> $V<br>"; }
        foreach( $_SESSION AS $K => $V ) { echo "$K -> $V<br>"; }

    if(isset($_GET['action']) AND ("logout" == $_GET['action'])) {
        session_destroy();
        echo "<p>\n";
        echo "    Sie haben sich ausgeloggt. Um wieder in den Adminbereich\n";
        echo "    zu kommen müssen sie sich wieder <a href=\"index.php?section=admin&amp;userID=0\">Einloggen</a>\n";
   		echo "</p>\n";
        
	} else {
        if(isset($_POST['UserID']) AND '0' == $_POST['UserID']) {
            echo "<p>\n";
            echo "    Bitte wählen sie einen Benutzernamen aus.\n";
            echo "</p>\n";
        } else {
            if(isset($_POST['UserID'], $_POST['Password']) AND
               login_right(addslashes($_POST['UserID']),
                           addslashes($_POST['Password']))) {
                $_SESSION['ID'] = $_POST['UserID'];
            }

            if(isset($_SESSION['ID'])) {
                
                if(isset($_GET['site']) AND isset($admin_site[$_GET['site']])) {
                    include($admin_site[$_GET['site']]);
                } else {

                    //
                    // Reste in der Session löschen
                    //
 
                     $_SESSION = array('ID' => $_SESSION['ID'],
                                      'IP' => $_SESSION['IP']);
 
                    include "admin_menu.php";
                    // Das Hauptmenu vom Adminbereich laden
                 }				
			
            } else {
                echo "<p class=\"error\">\n";
                echo "    Falsches Password\n";
                echo "</p>\n";
            }
        }
    }

  

?>

Ausgabe:

section -> admin
action -> logout
PHPSESSID -> Nummer kann ich jetzt schlecht sagen wird aber ausgegeben
IP -> IP kann ich nicht sagen wird aber ausgegeben

Sie haben sich ausgeloggt. Um wieder in den Adminbereich zu kommen müssen sie sich wieder Einloggen


Ich mein ich hab jetzt ne Session und alles aber i-wie klappts noch nicht so,
welches GET soll übergeben werden?
könntest du mir vllt nochmal einen script geben? der mit den schleifen war super
 

saila

Moderatorle

AW: Session Problem

Wenn du erfolgreich eingeloggt bist, muss ja in der URL site=blabla enthalten sein, damit du den Inhalt des Adminbereich sehen kannst. Das wäre übrigens dieser Abschnitt:
PHP:
<?php
if(isset($_GET['site']) AND isset($admin_site[$_GET['site']])) { 
                    include($admin_site[$_GET['site']]); 
                } else { 

                    // 
                    // Reste in der Session löschen 
                    // 
  
                     $_SESSION = array('ID' => $_SESSION['ID'], 
                                      'IP' => $_SESSION['IP']); 
  
                    include "admin_menu.php"; 
                    // Das Hauptmenu vom Adminbereich laden 
                 }     
?>

ansonsten wird ja lediglich das Menü angezeigt. Eine weitere Schleife ist nicht erforderlich, da REQUEST alles an POST und GET beinhaltet inkl. COOKIE und SESSION alles was in der SESSION enthalten ist.
 
Bilder bitte hier hochladen und danach über das Bild-Icon (Direktlink vorher kopieren) platzieren.
Antworten auf deine Fragen:
Neues Thema erstellen

Willkommen auf PSD-Tutorials.de

In unseren Foren vernetzt du dich mit anderen Personen, um dich rund um die Themen Fotografie, Grafik, Gestaltung, Bildbearbeitung und 3D auszutauschen. Außerdem schalten wir für dich regelmäßig kostenlose Inhalte frei. Liebe Grüße senden dir die PSD-Gründer Stefan und Matthias Petri aus Waren an der Müritz. Hier erfährst du mehr über uns.

Stefan und Matthias Petri von PSD-Tutorials.de

Nächster neuer Gratisinhalt

03
Stunden
:
:
25
Minuten
:
:
19
Sekunden

Neueste Themen & Antworten

Flatrate für Tutorials, Assets, Vorlagen

Zurzeit aktive Besucher

Statistik des Forums

Themen
175.189
Beiträge
2.582.077
Mitglieder
67.259
Neuestes Mitglied
SaschMasch1312
Oben