Announcement

Collapse
No announcement yet.

onunload mit Sjax + Session_destroy(php)

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • #16
    Hallo Falk Prüfer. Tut mir leid ich hatte etwas falsch verstanden gehabt mit der logout.php und dem imsgesamten Vorgang. Aber ich hab das jetzt genauso gemacht wie du es gesagt hast.

    Damit es nicht verwirrend wird. index.php ist einfach eine Datei wo mir eine Meldung ausgegeben wird wenn keine Session existiert.
    Und test.php ist in dem sinne die Hauptdatei.

    Und jetzt mal den HttpFox log.

    Ich rufe die Seite zu ersten mal ganz normal auf (Sessions sind schon erstellt wurden):

    Code:
    00:00:09.516	0.156	516	1754	GET	200	text/html	http://localhost/test/test.php
    Dann klicke ich auf aktualiserien:
    Code:
    00:00:16.516	0.390	516	1754	GET	200	text/html	http://localhost/test/test.php
    00:00:16.641	0.620	691	562	POST	302	Redirect to: index.php	http://localhost/test/go_logout.php
    00:00:16.735	0.125	536	6480	GET	200	text/html	http://localhost/test/index.php

    Der letzte Eintrag sagt ja eigentlich dass er mich auf index.php weiter leitet? Aber das hat er irgendwie nicht gemacht. Ich bin weiterhin auf test.php geblieben.

    Comment


    • #17
      Sorry wegen Doppelpost. Aber den mach ich mal zwecks Übersicht.

      Damit du mir nicht wieder alles aus der Nase ziehen musst ^_^

      Also ich hab das ganze mal auf das minimalste reduzierst. Ohne Ajaxrequest. nur die einfache weiterleitung.

      Das ganze sieht so aus:

      HTML Code:
      <html>
      <head>
      
      <script type="text/javascript">
      function exit() {
            if (location.href != 'logout.php') {
      	      location.href = 'logout.php';
              }
      } 
      </script>
      
      <body onunload="exit()">
      
      TESTSEITE
      
      </body>
      </html>
      HttpFox sagt beim reload nur:
      Code:
      00:00:01.390	1.110	515	414	GET	200	text/html	http://localhost/test2/index.php
      Also nichts von logout.php zu sehen.
      Mache ich den Fehler, wieso das ganze bei dir geht aber bei mir nicht?

      Comment


      • #18
        Hallo Snowflake,

        ich stell dann mal meine Testdateien dagegen:

        login.php:
        PHP Code:
        <?session_start();
        $_SESSION['uid']=3;
        ?>
        test.php:
        PHP Code:
        <?php session_start();

        if(!isset(
        $_SESSION['uid'])){
        exit(
        "SESSION NOT FOUND");
        }

        echo 
        $_SESSION['uid'];
        ?>

        <html>
        <head>

        <script type="text/javascript">
        function exit() {
              if (location.href != 'logout.php') {
                  location.href = 'logout.php';
                }
        }
        </script>
        </head>


        <body onunload="exit()">

        TESTSEITE

        </body>
        </html>
        logout.php:
        PHP Code:
        <?php session_start();
        session_destroy();
        $cookiePrm session_get_cookie_params();
        setcookie(session_name(), ''time()-3600$cookiePrm['path']);
        header('Location: test.php');
        ?>
        Die Session wird über ein Dummy-Login mit uid=3 initialisiert. Beim Aufruf von test.php bekomme ich folgende Ausgabe:
        3 TESTSEITE
        Jetzt mache ich einen Reload (F5). Ausgabe im HttpFox:
        Code:
        00:00:04.374	0.107	461	464	GET	(Aborted)	text/html	http://localhost.falk/test/session/test.php
        00:00:04.482	0.510	517	237	GET	302	Redirect to: test.php	http://localhost.falk/test/session/logout.php
        00:00:04.537	0.640	515	230	GET	(Aborted)	text/html	http://localhost.falk/test/session/test.php
        00:00:04.603	0.550	517	237	GET	302	Redirect to: test.php	http://localhost.falk/test/session/logout.php
        00:00:04.661	0.480	515	230	GET	200	text/html	http://localhost.falk/test/session/test.php
        00:00:04.744	0.520	461	(0)	GET	(Cache)	text/html	http://localhost.falk/test/session/test.php
        Ausgabe der Seite:
        SESSION NOT FOUND

        Analyse:
        Der FF ruft bei einem Reload zuerst die Seite vom Server ab, bevor er den onunload-Event ausführt. Der erste Request geht auf test.php. Das Ergebnis wird abgebrochen (wg. location.href='logout.php' bei onunload) und die logout.php aufgerufen. Diese veranlasst ein Redirect auf test.php.
        Da das Spiel sogar nochmal wiederholt wird, muß man davon ausgehen das im Hintergrund bereits die ursprünglich reloadete test.php aufgebaut wurde, die nun erneut den onunload-Event auslöst.

        Wenn du diese drei Dateien übernimmst und aufrufst - zuerst login.php, dann test.php und anschließend Reload - kannst du dann das von mir geschilderte Verhalten nachvollziehen?

        Ich verwende zum Test Firefox/3.0.3

        Gruß Falk
        Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

        Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

        Comment


        • #19
          Hey. Also das geschilderte Verhalten von dir kann ich nachvollziehen.

          Ich habe Firefox 2 als Standartbrowser. Und den Firefox 3 als Portable Edition.

          Also hab ich das ganze mal schnell mit dem Firefox 3 ausprobiert.
          Und siehe da, es funktioniert dort. Dann habe ich die ganzen Browser durchprobiert.

          Internet Exlorer 7, Opera und Google Chrom
          Das ganze funktioniert also leider nur im Firefox ab Version 3. Die anderen Browser rufen die logout.php gar nicht auf.


          Aber wieso es dort nicht funktioniert, kannst du mir wohl auch nicht erklären oder?


          Aber endlich sind wir mal weiter gekommen. Das freut mich. Vllt gibt es ja noch eine Lösung das ganze an die anderen gängigsten Browser anzupassen!?
          Vielen dank schonmal Falk Prüfer

          Comment


          • #20
            Hallo Snowflake,

            evtl gibt es auch noch eine andere Variante. Der FF ab 2.0 und IE4+ kennen das Event window.onbeforeunload. Dies wird definitiv VOR dem Neuladen der Seite aufgerufen und sollte damit eine gute Stelle für dein SJax-Logout sein. Außerdem bietet es die Möglichkeit, den User per PopUp auf die Folgen seines Tuns hinzuweisen.
            Der Opera ignoriert dieses Event aber ebenso wie onunload und Chrome hab ich nicht getestet (kommt mir auch nicht auf den Rechner).

            Gruß Falk
            Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

            Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

            Comment


            • #21
              Hey. Du hast recht. Den Eventhandler habe ich mir noch gar nicht so genau angeschaut.

              Das funktioniert sogar. Die session ist gelöscht. Was für ein wunder.. Ich hätte ja nicht gedacht, dass das irgendwann nocheinmal zu einem ergebnis führt was funktioniert Vielen vielen Dank an dich

              Ähm nur eine Frage noch...Die Abfrage mit dem Text lasse ich am besten einfach raus oder?
              Weil wenn der Text erscheint...Dann ist die Session ja schon längst gelöscht.

              Oder könnte man da auch irgendwie noch sagen, führe die funktion erst aus wenn auf ok geklickt wurde?




              (Naja und Google Chrom hab ich mir nur so zum testen mal drauf getan. Wieso hast du eine abneigung dagegen? Vllt sollte ich es doch auch wieder runter tun? ^^)
              Zuletzt editiert von Snowflake; 29.10.2008, 02:09.

              Comment


              • #22
                Originally posted by Snowflake View Post
                ...Ähm nur eine Frage noch...Die Abfrage mit dem Text lasse ich am besten einfach raus oder?
                Weil wenn der Text erscheint...Dann ist die Session ja schon längst gelöscht.

                Oder könnte man da auch irgendwie noch sagen, führe die funktion erst aus wenn auf ok geklickt wurde?
                Stimmt, die Fragefunktionalität kannst du nicht wirklich verwenden, da du vorher reagieren mußt und hinter die Frage käme man nur mit onunload - und das hatten wir gerade

                Originally posted by Snowflake View Post
                ...(Naja und Google Chrom hab ich mir nur so zum testen mal drauf getan. Wieso hast du eine abneigung dagegen? Vllt sollte ich es doch auch wieder runter tun? ^^)
                Google ist mir zusehr Datensammler, als das ich deren Browser wirklich vertrauen und zum Surfen verwenden würde.
                Außerdem benötige ich als Entwickler einen Browser der mir die Fehlersuche und Analyse meiner Webseiten ermöglicht und hier ist nunmal FF mit seinen Plugins (wie Firebug, HttpFox, Developer-Toolbar, HTML-Validator, Venkman, etc.) unschlagbar.

                Gruß Falk
                Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

                Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

                Comment


                • #23
                  Hey.

                  Jaa dann lasse ich die Abfrag einfach raus. Aber trotzdem gut zu wissen, auch wenn es lange gedauert hat, dass onunload für diese Zwecke total fehl am Platz ist. So ein Problem sollte dann nicht mehr so lange brauchen um gelöst zu werden.


                  Mit den Datensammlungen hast du recht. Hab ich so noch gar nicht drüber nachgedacht, was die wohl alles Sammeln und das ungewollt. Sehrwarscheinlich stimmt man bei der Installation zu, dass es gesammelt werden darf.

                  Und ja das stimmt Firefox ist wohl wirklich der beste Browser für Addons und ähnliches.


                  Naja ich sag aufjedenfall nocheinmal vielen dank für deine Geduld und deine Hilfe.

                  Vielleicht wirst du mir ja in nächster Zeit wenn ich mal wieder ein Problem haben sollte wieder helfen können. ^^


                  Gruß Snow

                  Comment

                  Working...
                  X