PHP --- Session Fehler

Dieses Thema im Forum "Webentwicklung" wurde erstellt von Mr.Clear, 16. Dezember 2005 .

Schlagworte:
Status des Themas:
Es sind keine weiteren Antworten möglich.
  1. 16. Dezember 2005
    Sorry Leute,
    aber ich bin wieder auf euch angewiesen. Hier der Fehler:
    Mein Code:
    Code:
    <?php
    include "../counter.php";
    error_reporting(E_ALL);
    include "function.php";
    
    // 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>\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);
     }
    
    
    
    
    include "design.php"; 
    ///include....und so weiter
    
    Hoffe ihr könnt mir sagen, was ich falsch mach... irgend eine wichtige bedingung muss ich missachten...
     
  2. 16. Dezember 2005
    du hast schon ein header vor der session gesendet

    include "../counter.php";
     
  3. 16. Dezember 2005
    achso ok,

    als was definiert man einen header?
    da kommen nämlich nur php-funktionen vor...und kein <head> .
    löl hört sich bestimmt nooblike an ^^
    mfg
     
  4. 16. Dezember 2005
    ne also

    includen ist ein header
    oder header:location


    du musst session_start() über include(..) machen
     
  5. 16. Dezember 2005
    achso, des is das ganze geheimnis ^^
    ok, hoffe es geht, danke --> 10er

    ich close solange hier

    EDIT:
    Habs wieder geöffnet da ich ncoh ein prob hab =)
    Also, hab das start session nun ganz zum anfang hin.
    Jedoch meckert er immer noch, sobald der erste echo befehl kommt..
    woran liegt das?

    Code:
    <?php
    //// Session starten ////
     if(isset($_GET['section']) AND ("admin" == $_GET['section'])) { /// Session starten wenn ?section=admin geöffnet wurde
     session_start();
     if(!isset($_SESSION['IP'])) {
     $_SESSION['IP'] = $_SERVER['REMOTE_ADDR'];
     }
     if($_SESSION['IP'] != $_SERVER['REMOTE_ADDR']) {
     echo "<p>\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 
     }
     }
    
     include "function.php";
    
     if(get_magic_quotes_gpc()) {
     array_stripslashes($_GET);
     array_stripslashes($_POST);
     array_stripslashes($_COOKIE);
     }
    
    ////////////////////////////////////////////////
    
    include "../counter.php";
    error_reporting(E_ALL);
    
    include "design.php"; 
    echo $head;
    
    und hier die fehlermeldung:
    Code:
    Warning: session_start(): Cannot send session cookie - headers already sent by (output started at /home/..../index.php:33) in /home/..../admin.php on line 5
    
    Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at /home/..../index.php:33) in /home/..../admin.php on line 5
    
    MFg

    PS: Die admin.php ist hier zu finden http://tut.php-q.net/login.html#u6 bisher hab ich sie noch nicht verändert, da das grundprinzip noch net funzt.

    PPS: mir ist gerade aufgefallen, dass im $head von design.php ein <head> vorkommt um stylesheet einzubinden... das dürfte aber ja nciht stören oder? (bin nämlich bissi von den zwei head begriffen etwas iritiert ^^)

    PPPS: ich bin froh dass es doch so geduldige leute wei dich gibt, hacker5
     
  6. 18. Dezember 2005
    hm es darf eigendlich nichts anderes vor session() stehen

    also so wäre es richtig
    <?
    session()

    rest


    es darf noch nicht mal ein leerzeichen davor stehen
     
  7. 19. Dezember 2005
    jo mach einfach
    <?php
    session_start();
    .
    .
    .
    ?>

    und mach als bedingung einfach, das wenn die section nicht admin ist, das er dann die session beendet.
    sorum sollte es den gleichen effekt haben und auch funktionieren.

    hf
     
  8. 19. Dezember 2005
    ok, dass könnte funzen

    wenn, dann kreigst du auch noch ne fette 10 ^^
    mfg!

    EDIT:
    löl, fast ^^

    wir sind schon am ende des problems angekommen:
    der letzen zeile der index.php

    foglender fehler:
    Code:
    Parse error: parse error, unexpected $ in /home/..../index.php on line 96
    und das is die letze zeile:
    Code:
    95: echo $foot;
    96: ?>
    
    aber $foot ist definiert, das ganz ging scho am anfang sehr gut...

    hier nochmal was ich nun verändert hab:

    Code:
    
    <?php
    session_start();
    
     if(!isset($_GET['section']) AND ("admin" == $_GET['section'])) {
     if(!isset($_SESSION['IP'])) {
     $_SESSION['IP'] = $_SERVER['REMOTE_ADDR'];
     }
     if($_SESSION['IP'] != $_SERVER['REMOTE_ADDR']) {
     session_destroy();
     echo "<p>\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=\"www.meinesite.de\">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);
     }
     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 Einloggen\n";
     echo "</p>\n";
     } else {
     if(isset($_POST['UserID']) AND '0' == $_POST['UserID']) {
     session_destroy();
     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']))) 
     {
     $sql = "SELECT
     `Password`
     FROM
     `users`
     WHERE 
     Name='".$_POST['Name']."';";
     $result = mysql_query($sql) OR die(mysql_error());
    
     if(!$result == $_POST['Password']) { die('passwort falsch');}
     
     
     $_SESSION['ID'] = $_POST['UserID'];
     }
     if(isset($_SESSION['ID'])) {
     echo "ADMIN CONTENT";
     echo "<p>\n";
     echo " Willkommen im Adminbereich <br />\n";
     echo " <a href=\"index.php?section=admin&amp;".$_SESSION['ID']."\">Repeat</a>\n";
     echo " <a href=\"index.php?section=admin&amp;action=logout&amp;".$_SESSION['ID']."\">Ausloggen</a>\n";
     echo "</p>\n";
     } 
    
    include "../counter.php";
    include "function.php";
    error_reporting(E_ALL);
    
    
    
    include "design.php"; 
    /// usw wie bisher ................... ////
    
    
     
  9. 20. Dezember 2005
    guck mal ob du vor der Zeile 96 irgendwo ein ; oder sowas vergessen hast, guck ob bei den if und else klammern alle richtig wieder geschlossen wurden.
    das sieht danach aus das irgendwo ein zeichen fehlt.
    meist fehlt bei dem fehler das ; nach einer zeile.
    ansonsten poste nochmla den kompletten code 4 augen sehen mehr als 2

    greetz
     
  10. 21. Dezember 2005
    Jo, ich poste mal,
    weil ich hab scho gekuckt, ich hab mal ne klammer mehr gemacht an stellen die ich verdächtigte, usw... hilft überall nix, außerdem is es ja im großen und ganzen des gleiche geblieben.

    Danke für die Hilfsbereitschaft

    MFG

    Hier folgt der code:
    Code:
    <?php
    session_start();
    
    $seite="1";
    include "../counter.php";
    include "function.php";
    error_reporting(E_ALL);
    
     if(!isset($_GET['s']) AND ("admin" == $_GET['s'])) {
     if(!isset($_SESSION['IP'])) {
     $_SESSION['IP'] = $_SERVER['REMOTE_ADDR'];
     }
     if($_SESSION['IP'] != $_SERVER['REMOTE_ADDR']) {
     session_destroy();
     echo "<p>\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=\"www.addy.de\">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);
     }
     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 Einloggen\n";
     echo "</p>\n";
     } else {
     if(isset($_POST['UserID']) AND '0' == $_POST['UserID']) {
     session_destroy();
     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']))) 
     {
     $sql = "SELECT
     `Password`
     FROM
     `users`
     WHERE 
     Name='".$_POST['Name']."';";
     $result = mysql_query($sql) OR die(mysql_error());
    
     if(!$result == $_POST['Password']) {
     die('passwort falsch');}
     
     
     $_SESSION['ID'] = $_POST['UserID'];
     }
     if(isset($_SESSION['ID'])) {
     echo "ADMIN CONTENT";
     echo "<p>\n";
     echo " Willkommen im Adminbereich <br />\n";
     echo " <a href=\"index.php?s=admin&amp;".$_SESSION['ID']."\">Repeat</a>\n";
     echo " <a href=\"index.php?s=admin&amp;action=logout&amp;".$_SESSION['ID']."\">Ausloggen</a>\n";
     echo "</p>\n";
     } 
    
    
    //////////////////////////Ab hier dürfte kein Fehler zu finden sein////////
    include "design.php"; 
    echo $head;
    
    include "login.php";
     
    echo $buttons; 
    
    include "menu.php";
    
    //////////// CONTENT //////////////////////
    include "content.php";
    
    //////////////////////// RECHTE INFO INFO INFO INFO INFO INFO INFO INFO INFO /////////////////////////////////
    echo ' <td align="center" valign="top"><table width="100%" border="0" cellspacing="0" cellpadding="0">
     <tr>
     <td width="200" height="175" align="center" valign="top" background="images/info.png">&nbsp;</td>
     </tr>
     <tr>
     <td width="200" height="100%" align="center" valign="top" background="images/info_puffer.png"><p>Info</p>
     <p align="center">Impressum</p>
     <p align="center">Suche</p>
     <p align="center"><a href="index.php?s=reg">Registrieren</a></p>
     <p align="center"><a href="index.php?s=admin">Admin</a></p>
     <p align="center"></p>';
    
    echo $foot;
    ?>
    
    PS: kleine anmerkung: ohne session_start und den ganzen abfragen, gehts... also ab Zeile 70 ab dem ich das DESIGN.PHP hinzufüg, hab ich nix mehr geändert...der fehler muss eig davor liegen...

    EDIT: wäre goil, wenn jemand es selbst probieren könnte, einfach ma ne index.php erstellen, die variablen $echo,foot,head definieren, kann ja einfach a zeilenumbruch sein, is ja ansich unwichtig,..
    Counter.php is logischerweise ein Counter, funzt auch, ging davor einwandfrei, und was wichtig ist beim ausprobieren, dass der counter schon zu DB connected. ansonsten sind nur noch function.php unbeklannt die so aussieht, und auch richtig sein müsste:

    Code:
    <?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'];
     }
    function array_stripslashes(&$var)
     {
     if(is_string($var)) {
     $var = stripslashes($var);
     } else {
     if(is_array($var)) {
     foreach($var AS $key => $value) {
     array_stripslashes($var[$key]);
     } } } }
    ?>
    
     
  11. 24. Dezember 2005
    *push*

    nobody knows =) ?
    falls jemand ein funktionierendes Login und Session-Script parat hat,
    nicht zu kompliziert, kanns mir auch schicken, damit ich dadurch was dazu lern und vllt ne andere methode entdecke oder meinen fehler erkenn..
    wäre goil

    mfg :]
     
  12. 25. Dezember 2005
    *2ter und letzter Push*
     
  13. 25. Dezember 2005
    guck mal auf designnation*de da gibt es ein paar login scripts musste mal gucken ob es auf sessions basiert

    ansonsten google *g*
     
  14. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.