Session Problem

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

  • Session Problem

    Hi,

    habe folgendes Problem:

    Eine Page mit Login über Sessions, dazu wenn eine gültige Session existiert setzt sie noch einen Cookie um auf Wunsch weitere Logins zu vermeiden.

    Offline auf meinem Rechner klappt das wunderbar.

    Online jedoch erhalte ich nach dem einloggen immer

    Warning: Cannot modify header information - headers already sent by (output started at /inc/session.inc.php:86) in /main.php on line 14

    Warning: Cannot modify header information - headers already sent by (output started at /inc/session.inc.php:86) in /main.php on line 15
    Bei erfolgreichem Login wird
    PHP-Code:
    $_SESSION["User"] = $_POST['UserName'];
    $_SESSION["Pass"] = md5($_POST['Password']); 
    gesetzt.

    Die Startseite geht folgendermaßen los:
    PHP-Code:
    session_start();  

    header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); // date in the past
    header("Last-Modified: " gmdate("D, d M Y H:i:s") . " GMT"); // always modified

    include 'inc/session.inc.php';

    if (isset(
    $_SESSION["User"])) {
    $userid=check_user2($_SESSION["User"], session_id());
        if (
    $userid!=false) { 
            
    setcookie("User"$_SESSION["User"], time()+604800);
            
    setcookie("Pass"$_SESSION["Pass"], time()+604800);
            }
        else { 
    session_destroy();
            
    setcookie("User"$_SESSION["User"], time()-604800);
            
    setcookie("Pass"$_SESSION["Pass"], time()-604800); };
    };

    if (isset(
    $_COOKIE['User']) && isset($_COOKIE['Pass'])) {
    $userid=check_user3($_COOKIE['User'], $_COOKIE['Pass']);
        if (
    $userid!=false) {  
            
    login($userid);
            
    $_SESSION["User"] = $_COOKIE['User'];
            };
    }; 
    An der Stelle wo ein gültiger Cookie gesetzt wird scheint der Fehler zu liegen. Versteh nur nicht warum, da offline alles wunderbar klappt.

    Danke
    Sayon
    Zuletzt geändert von Sayon; 22.03.2004, 14:27.

  • #2
    {quote]headers already sent by (output started at /inc/session.inc.php:86)[/quote]was steht denn da?

    hast du in der session.inc.php leerzeichen oder leerzeilen oder sonst irgendeinen quatsch vor <?php oder nach ?> ?
    Ich denke, also bin ich. - Einige sind trotzdem...

    Kommentar


    • #3
      aus handbuch
      Beachten Sie, dass header() aufgerufen werden muss, bevor eine
      Ausgabe gesendet wurde, egal ob normale HTML Tags, leere Zeilen in
      einer Datei oder von PHP. Ein weit verbreiteter Fehler ist mittels include(),
      require(), oder anderen Dateizugriffsmethoden Code zu lesen, und so
      unbewusst Leerzeichen oder Leerzeilen auszugeben, bevor header()
      aufgerufen wird.
      schau mal, ob du nicht vielleicht irgend ne ausgabe vorm header hast


      EDIT:
      zu spät :grrrr:

      Wo kämen wir hin, wenn jeder sagte: Wo kämen wir hin? und keiner ginge, um zu sehen, wohin wir kämen, wenn wir gingen?

      Kommentar


      • #4
        Hallo,

        Warning: Cannot modify header information - headers already sent by (output started at /inc/session.inc.php:86) in /main.php on line 14

        Warning: Cannot modify header information - headers already sent by (output started at /inc/session.inc.php:86) in /main.php on line 15
        Das sagt schon alles oder nicht...
        PHP-Code:
        header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); // date in the past
        header("Last-Modified: " gmdate("D, d M Y H:i:s") . " GMT"); // 
        Die verusachen den Error. Setz die header mal, nach dem du letzten Session irgendwas zuweist, ein.
        PHP-Code:
        if (isset($_COOKIE['User']) && isset($_COOKIE['Pass'])) {
        $userid=check_user3($_COOKIE['User'], $_COOKIE['Pass']);
            if (
        $userid!=false) {  
                
        login($userid);
                
        $_SESSION["User"] = $_COOKIE['User'];
                };
        };
        header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); // date in the past
        header("Last-Modified: " gmdate("D, d M Y H:i:s") . " GMT"); // always modified 
        [EDIT] Das ist quatsch was ich geschrieben habe. sry. War auf dem falschen Dampfer
        cheers
        Zuletzt geändert von schlimmerfinger; 22.03.2004, 14:46.
        Nichts auf der Welt ist so gerecht verteilt wie der Verstand. Denn jedermann ist davon überzeugt, dass er genug davon habe – René Descartes
        PHP Sicherheit
        PHPUnit[1-2]
        Professionelle Softwareentwicklung mit PHP 5
        Professionelle PHP 5-Programmierung

        Kommentar


        • #5
          Die Fehlermeldung erscheint in nicht in Deiner Entwicklungsumgebung, weil vermutlich in der php.ini Deiner PHP-Konfiguration der Wert
          output_buffering
          gesetzt ist. Damit wird die Ausgabe Deines Skripts bis zur endgültigen Wiedergabe zwischengespeichert. In dem Fall ist es egal, wo und wann du die Header verwendest.

          In einer professionellen Serverkonfiguration hast Du üblicherweise kein (resourcenverschwendendes) Buffering und somit nicht den Luxus, den Header setzen zu können, wann immer Du willst.

          Wie in den vorhergehenden Postings treffend bemerkt wurde, muß in einer solchen Umgebung der Header unbedingt zu Beginn der Übertragung an den Browser geschehen. Der Header vereinbart die Bedingungen, zu denen die nachfolgenden Daten verarbeitet werden sollen.

          Wenn kein Buffering aktiviert ist, gilt: als Ausgabe/Beginn der Übertragung gelten alle Zeichen vor dem ersten <? in Deinem Skript und natürlich sämtliche Prints & echos im Skript.

          Generell: Konsequenter Weise solltest Du in Deinen Skripten Berechnungen und Ausgabe getrennt halten. Damit kannst Du bei Bedarf aufgrund der Berechnungen immer noch die passenden Header senden.
          Happiness is an empty error log

          Kommentar


          • #6
            Die session.inc.php enthält eigentlich nur Funktionen die für das Login notwendig sind. Ohne Ausgabe.

            Liegt es vielleicht daran das diese Datei selber nochmal <?php und ?> enthält?

            Gruss
            Sayon

            Kommentar


            • #7
              Original geschrieben von mrhappiness
              hast du in der session.inc.php leerzeichen oder leerzeilen oder sonst irgendeinen quatsch vor <?php oder nach ?> ?
              häng die datei doch einfach mal an, wenn du nix findest, aber achte darauf, dass du sie in session.php.txt umbenennst
              Ich denke, also bin ich. - Einige sind trotzdem...

              Kommentar


              • #8
                ist doch vollkommen unnötig, hier immer allen murks zu posten oder anzuhängen ...

                die leute sollen gefälligst mal die funktion headers_sent() benutzen, und zwar mit den zwei optionalen parametern. danach sollte doch eigentlich klar sein, in welchem script und an welcher stelle die ausgabe gestartet wurde.
                I don't believe in rebirth. Actually, I never did in my whole lives.

                Kommentar

                Lädt...
                X