Ankündigung

Einklappen
Keine Ankündigung bisher.

Session logout bei Frames

Einklappen

Neue Werbung 2019

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

  • Session logout bei Frames

    Hallo, habe ein frameset mit 3 frames unter anderem ein Rubrikframe. Wenn ich nun die Session beenden will wird eine neue Seite geladen und der Inhalt von $_SESSION wird gelöscht . Dies geht auch da ich probehalber die Sessionsdaten aufgerufen habe und sie gelöscht sind.

    Aber wenn ich im Browser auf "zurück" klicke wird die Session wieder aufgenommen und alle Daten in $_SESSION sind noch vorhanden so daß ich im Rubrikframe weiterklicken kann als wäre nichts gelöscht worden.

    Hier der logout-Code:
    PHP-Code:
    session_start();  
    if(
    $_POST['anforderung']=="logout")//session beenden----
     
    {

        
    $_SESSION = array();
        if (isset(
    $_COOKIE[session_name()])) 
         {
        
    setcookie(session_name(), ''time()-42000'/');
         }
       
    session_destroy();
        
      } 
    Hier das Form zum Logout und aufrufen einer neuen Seite:
    PHP-Code:
       print"

    Zum abmelden klicken Sie bitte auf den Button</p>"
    ;
       print
    "

    <form action=\"index.php5?"
    .strip_tags(SID)."\" method=\"post\" target=\"_top\">";
       echo
    '<input type="hidden" name="anforderung" value="logout" >';
       echo
    '<input type="Submit"  value="abmelden">';
       echo
    '</form></p>'
    Wie kann so etwas sein, wenn das Sessionsarry einmal gelöscht ist dürfte es sich doch nicht mehr füllen?

    Danke euch für die Hilfe im voraus!

  • #2
    Seltsam.
    Was sagt phpinfo() zu session.save_handler?
    Und welche PHP Version wird verwendet? Welches OS?

    Der entsprechende Code für save_handler=files sieht so aus
    Code:
    PS_DESTROY_FUNC(files)
    {
    	char buf[MAXPATHLEN];
    	PS_FILES_DATA;
    
    	if (!ps_files_path_create(buf, sizeof(buf), data, key))
    		return FAILURE;
    	
    	ps_files_close(data);
    	
    	if (VCWD_UNLINK(buf) == -1) {
    		return FAILURE;
    	}
    
    	return SUCCESS;
    }
    Die Sessiondatei wird geschlossen und anschließend gelöscht.
    Klappt das nicht (also return FAILURE), wird ein E_WARNING "Session object destruction failed" ausgelöst. Passiert das mit error_reporting(E_ALL) ?

    Kommentar


    • #3
      session.save_handler=files
      Versio=PHP 5.1.1 mit Apache und Win XP

      Kommentar


      • #4
        Und die Skripte für die frames sind auch vor dem logout beendet gewesen?

        Ansonsten bin ich überfragt.

        Kommentar


        • #5
          Zitat von Bruchpilot
          Klappt das nicht (also return FAILURE), wird ein E_WARNING "Session object destruction failed" ausgelöst. Passiert das mit error_reporting(E_ALL) ?
          Wie stehts hiermit?

          Nachtrag: Wird das Script, das die Session zerstört innerhalb eines Framesets aufgerufen, in dem andere Script quasi zeitgleich aufgerufen werden und die so eigentlich zerstörte Session wieder aufnehmen?

          Kommentar


          • #6
            Wenn ich obigen Code von Bruchpilot eingebe wird parse error, unexpected '{' in line 31 angezeigt also dort wo unter "PS_DESTROY_FUNC(files)" das erst "{" steht

            Das Script wird innerhalb des mittleren Frames aufgufen und ruft die Hauptseite wieder auf, target="_top" , hier der Code dieser Seite

            PHP-Code:
            include("arb-inc/arb-header.inc.php5");


            if(!empty(
            $_POST['login_ok']))
            {
            echo
            '<frameset  rows="165,*" border="0"  framespacing="0" >';
            print
            "<frame src=\"oben.php5?".strip_tags(SID)."\" name=\"oben\" marginwidth=\"0\"  marginheight=\"0\" scrolling=\"no\" noresize=\"noresize\">";
            echo
            '<frameset cols="200,*">';
            print 
            "<frame name=\"rubrik\" src=\"rubrik.php5?".strip_tags(SID)."\">";
            print 
            "<frame name=\"mitte\" src=\"text.php5?".strip_tags(SID)."\"></frameset>";

            echo
            '</frameset>';
            }
            else
            //login formular
            {
            echo
            '<body topmargin="0" marginwidth="0"  marginheight="0">';
            echo
            '

            [img]bilder/banner.jpg[/img] </p>'
            ;

            include (
            "./arb-tpl/form-login.tpl");

            echo
            '</body>';

            Alle Framescripte werden vor Logout beendet.

            Kommentar


            • #7
              Zitat von Diet
              Wenn ich obigen Code von Bruchpilot eingebe wird parse error, unexpected '{' in line 31 angezeigt also dort wo unter "PS_DESTROY_FUNC(files)" das erst "{" steht
              Wie kommst Du auch darauf? Das ist der PHP Quellcode - das was PHP ausmacht - kein Skript für PHP.

              Die Frage war, was mit error_reporting(E_ALL); passiert.

              Kommentar


              • #8
                Allso brauche ich den Code nicht einzugeben?
                habe jetzt
                PHP-Code:
                print error_reporting(E_ALL); 
                nach (siehe oben)
                PHP-Code:
                session_destroy(); 
                eingegeben und als Ergebnis 2039 angezeigt bekommen.

                Kommentar


                • #9
                  Zitat von Bruchpilot
                  Seltsam.
                  Wie ich schon paarmal schrieb:
                  ein session_write_close(); nach dem $_SESSION = array(); garantiert, daß die Sessiondaten auch im Sessionfile gelöscht werden. Dann isses egal, wann genau PHP das Sessionfile killt.

                  Allerdings isses sinnfrei, eine Session innerhalb eines Framesets zu löschen, weil man nicht weiß, was die anderen Scripte für einen Unfug treiben, wenn sie vom Client requestet werden (target top).

                  Kommentar


                  • #10
                    Auch mit session_write_close(); gehts nicht.
                    Gibt es den eine Möglichkeit den Zurück-Button des Browsers auszuschalten?

                    Kommentar


                    • #11
                      session_destroy() führt ebenfalls ein ps_files_close(data); aus wie session_write_close() - mindestens im php 5.1.2 Code. Sollte also erstmal egal sein.

                      Zitat von Diet
                      Allso brauche ich den Code nicht einzugeben?
                      habe jetzt
                      PHP-Code:
                      print error_reporting(E_ALL); 
                      Wo hast Du denn da schon wieder das print her? Blühende Phantasie.
                      siehe http://php.net/error_reporting

                      Zitat von Diet
                      Gibt es den eine Möglichkeit den Zurück-Button des Browsers auszuschalten?
                      Nein, das wäre ja auch noch schöner, wenn Du meinen Browser kaputt machen könntest.

                      Kommentar


                      • #12
                        Zitat von Diet
                        Auch mit session_write_close(); gehts nicht.
                        Warum beachtest Du das nicht?
                        Zitat von ignatz
                        Allerdings isses sinnfrei, eine Session innerhalb eines Framesets zu löschen, weil man nicht weiß, was die anderen Scripte für einen Unfug treiben, wenn sie vom Client requestet werden (target top).
                        Gibt es den eine Möglichkeit den Zurück-Button des Browsers auszuschalten?
                        Lösche die Session korrekt.

                        PHP-Code:
                        printf('[url="logout.php?%s"]Logout[/url]',
                           
                        SID); 
                        logout.php
                        PHP-Code:
                        session_start();
                        $_SESSION = array();
                        session_write_close();
                        session_destroy();
                        header('Location: http://' $_SERVER['SERVER_NAME'] . '/index.php');
                        exit; 
                        Die Session wird dann (bei Keksbetrieb) in index.php wieder aufgenommen, aber ohne die alten Sessiondaten.

                        Kommentar


                        • #13
                          Zitat von Bruchpilot
                          session_destroy() führt ebenfalls ein ps_files_close(data); aus wie session_write_close() - mindestens im php 5.1.2 Code. Sollte also erstmal egal sein.
                          Murphy: "Bei einer beliebigen Berechnung erweist sich die Größe, deren Richtigkeit für alle außer Frage stand, am Schluß als Fehlerquelle."

                          Kommentar


                          • #14
                            Passiert meistens, wenn man zuviel Mambojambo drumherumbaut. Also bspw überflüssige Funktionsaufrufe

                            Aber wenn es damit funktionieren sollte, soll es mir auch ega... ähm recht sein.

                            Kommentar


                            • #15
                              ignatz, habe deinen Code eingegeben, ist aber keine Änderung erfolgt. Werde nochmals darüber grübeln und wenns nicht geht alles ohne Frames umstellen.
                              Ist nur komisch das die Sessiondaten in index.php gelöscht sind (Session-id ist auch noch gleich) aber beim zurückgehen ist alles wieder da.
                              Werde dies später mal auf dem Internetserver ausprobieren, vieleicht ist das hier ein Windows-Problem

                              Kommentar

                              Lädt...
                              X