R. Strub: & PHP: Fenster schliessen - AUTH abmelden

Hallo Forum

Habe folgendes Problem ...
Ich habe einen Memberbereich errichtet, welcher durch ein htaccess geschützt wird. unm diesen aufzulösen, muss ich das Fenster ja bekanntlich schiessen und ein anderes neu aufmachen. nun habe ich das mit javascript versucht:

<script type="text/javascript">
<!--
F1 = window.open("index.php","Member","");
self.focus();
self.close();
//-->
</script>

1. Das funktioniert jedoch nicht, denn der apache fragt mich nicht nach einem neuen Passwort, sondern logt mich als gleichen Benutzer wieder ein. Was kann ich da machen ?

2. bei der aufforderung self.close() werde ich gefragt, ob ich wirklich schliessen will. Ich habe jedoch schon gesehen, dass das auch automatisch geht; aber wie?

Danke Reto

  1. Hallo Reto,

    1. Das funktioniert jedoch nicht, denn der apache fragt mich nicht nach einem neuen Passwort, sondern logt mich als gleichen Benutzer wieder ein. Was kann ich da machen ?

    Du musst _alle_ Browserfenster schließen, sonst merkt sich der Browser Username und Passwort für diese Seite.

    1. bei der aufforderung self.close() werde ich gefragt, ob ich wirklich schliessen will. Ich habe jedoch schon gesehen, dass das auch automatisch geht; aber wie?

    Nein, hast du nicht gesehen, da es nicht geht.

    Eine andere Möglichkeit wäre, die Userauthentifikation für diese Seite erneut durchzuführen (also mit PHP einen 401-Header zu senden), in dem der User dann keine Daten eingibt. Dann werden Username und Passwort vom Browser wieder gelöscht. Dazu gibt es auch einige Postings im </archiv/>.

    Wenn dir das ganze nicht wirklich zusagt, dann solltest du dich mit Sessions in PHP beschäftigen [1], damit lassen sich Userbereiche wesentlich flexibler gestalten, und man ist nicht gezwungen, alle Browserfenster zu schließen, um den Userbereich wieder zu verlassen.

    [1] http://www.php.net/manual/de/ref.session.php

    Grüße aus Darmstadt,
    Benjamin

    --
    http://aktuell.de.selfhtml.org/tippstricks/beitrag.htm
    SELF-Code: sh:) fo:) ch:} rl:| br:> n4:( ie:% mo:) va:) de:> zu:) fl:| ss:) ls[
    1. Hallo Benjamin

      Wie hast du das mit dem 401-er gemeint ??? da binn ich nicht so ganz nach gekommen! Im archiv hab ich zwar gesucht, jedoch nichts wirklich treffendes gefunden.

      Kannst du mir etwas näheres zum 401-er sagen; wie ich den verwenden muss oder kann ?!?

      Wäre dankbar.
      Reto

      1. Hallo Reto,

        Wie hast du das mit dem 401-er gemeint ??? da binn ich nicht so ganz nach gekommen! Im archiv hab ich zwar gesucht, jedoch nichts wirklich treffendes gefunden.

        http://forum.de.selfhtml.org/archiv/2003/1/34782/#m189620. Suchbegriffe: header 401 php

        Kannst du mir etwas näheres zum 401-er sagen; wie ich den verwenden muss oder kann ?!?

        Ja, mit der PHP-Funktion header [1] kannst du jeden beliebigen HTTP-Statuscode an den Browser senden. Der 401er veranlasst eben den Browser, eine Username/Passwortabfrage einzublenden (derselbe Effekt wie bei Basic-Auth mittels .htaccess-Datei). Schau dir die header-Funktion und den oben genannten Link mal genauer an.

        [1] http://www.php.net/manual/de/function.header.php

        Grüße aus Darmstadt,
        Benjamin

        --
        http://aktuell.de.selfhtml.org/tippstricks/beitrag.htm
        SELF-Code: sh:) fo:) ch:} rl:| br:> n4:( ie:% mo:) va:) de:> zu:) fl:| ss:) ls[
        1. Hallo Benjamin

          Habe nun folgenses:

          function Auth()
          {
           header('WWW-Authenticate: Basic realm="Member Bereich');
           header('HTTP/1.0 401 Unauthorized');
           header('status: 401 Unauthorized');

          // Defines the charset to be used
           header('Content-Type: text/html; charset=iso-8859-1');?>
           <body>
           <br /><br />
           <center>
            <h1>"Willkommen bei ..."</h1>
           </center>
           <br />
           <p>Falscher Benutzername/Kennwort. Zugriff verweigert.</p>
           </body>

          </html>
           <?php
           echo "\n";
           exit();

          return TRUE;
          } // end of the 'Auth()' function

          Da ist nur noch ein Problem; oder zwei:

          1. Von wo weiss der Browser dann, welche Benutzer er zulassen darf und welche nicht ??? denn beim ausführen dieser funktion kommt das htaccess-ähnliche fenster und fragt nach einem benutzer.

          2. wie wird da die ursprüngliche seite wieder geladen ?!?

          Danke Reto

          1. Hallo Reto,

            header('status: 401 Unauthorized');

            das gibt es afaik nicht.

            <br /><br />
             <center>

            *pfui* xhtml (<br />) und <center>...

            1. Von wo weiss der Browser dann, welche Benutzer er zulassen darf und welche nicht ???

            du musst z.B. aus einer Datenbank auslesen, ob die User/Passwort-Kombination stimmt und wenn ja, wird der Seiteninhalt ausgegeben, und wenn nein kommt ein 401.
            bei mir schaut das etwa so aus:
            <?php
            if(isset($_SERVER["PHP_AUTH_USER"]) && isset($_SERVER["PHP_AUTH_PW"])){
              $user = $_SERVER["PHP_AUTH_USER"];
              $pw = md5($_SERVER["PHP_AUTH_PW"]); //md5() deshalb weil meine Passwörter md5 verschlüsselt in der db stehen
              $query = "SELECT name,passwort FROM user WHERE name = '$user' AND passwort = '$pw'";
              $rs = mysql_query($query,$db);
              $anzahl = mysql_num_rows($rs);
              if($anzahl==1) $richtigeruser = true;
              else $richtigeruser = false;
            }
            else $richtigeruser = false;
            if ($richtigeruser){
            //seite ausgeben
            }
            else{
              header("WWW-Authenticate: Basic realm="irgendeinkommentar"");
              header("HTTP/1.0 401 Unauthorized");
              include("keinzugriff.php");
              exit;
            }
            ?>
            zwar nicht schön, aber selten :-)

            denn beim ausführen dieser funktion kommt das htaccess-ähnliche fenster und fragt nach einem benutzer.

            dass soll die Seite ja auch :-)

            1. wie wird da die ursprüngliche seite wieder geladen ?!?

            wie meinen?

            Danke Reto

            Grüße aus Nürnberg
            Tobias

            --
            sh:( fo:) ch:? rl:( br:< n4:& ie:% mo:| va:) de:] zu:) fl:( ss:| ls:[ js:|
            (Selfcode -> http://emmanuel.dammerer.at/selfcode.html)
            1. Hallo Tobias

              Nun die Grundfrage war eigentlich, wie ich einen per htaccess eingelogten user ausloggen kann, un einen anderen anzumelden.

              dass es möglich ist, habe ich im phpMyAdmin gesehen (fals er dir kein begriff ist: < www.phpmyadmin.net>)

              Ist das eine alternative ???

              Ich komme nur aus den scripts von diesem Programm nicht ganz klar ... es sind so viele verschachtelte.

              Gruss Reto

              1. Hallo Reto,

                Nun die Grundfrage war eigentlich, wie ich einen per htaccess eingelogten user ausloggen kann, un einen anderen anzumelden.

                ups, natürlich :-)
                dann sende zu auslogen statt
                header("WWW-Authenticate: Basic realm="irgendeinkommentar"");
                einfach
                header("WWW-Authenticate: Basic realm="auslogen"");
                dann dürfe (habs nicht getestet) nochmal der anmeldedialog kommen, und wenn der der dann abgebrochen wird, kommt man auf den ersten auch nicht mehr rein. Allerdings glaube ich fast nicht, dass das funktioniert - die einfachste Methode ist eben den Browser zu schließen, oder Sessions zu verwenden.

                dass es möglich ist, habe ich im phpMyAdmin gesehen

                wo hast du das genau gesehen?

                (fals er dir kein begriff ist: < www.phpmyadmin.net>)

                doch, ist mir ein Begriff, aber im link hat noch ein http:// gefehlt :-)

                Ich komme nur aus den scripts von diesem Programm nicht ganz klar ... es sind so viele verschachtelte.

                dann musst du eben systematisch das was nicht relevant ist rauslöschen (natürlich nicht im Original, sondern in deiner Kopie :-))

                Grüße aus Nürnberg
                Tobias

                --
                sh:( fo:) ch:? rl:( br:< n4:& ie:% mo:| va:) de:] zu:) fl:( ss:| ls:[ js:|
                (Selfcode -> http://emmanuel.dammerer.at/selfcode.html)
  2. Hallo Reto,

    1. Das funktioniert jedoch nicht, denn der apache fragt mich nicht nach einem neuen Passwort, sondern logt mich als gleichen Benutzer wieder ein. Was kann ich da machen ?

    soweit ich weiß, muss die gesamte Browserinstanz geschlossen werden. afaik reicht es nicht nur das eine Fenster zu schließen.

    1. bei der aufforderung self.close() werde ich gefragt, ob ich wirklich schliessen will.

    das geht nicht anders.

    Ich habe jedoch schon gesehen, dass das auch automatisch geht; aber wie?

    wo?

    Grüße aus Nürnberg
    Tobias

    --
    sh:( fo:) ch:? rl:( br:< n4:& ie:% mo:| va:) de:] zu:) fl:( ss:| ls:[ js:|
    (Selfcode -> http://emmanuel.dammerer.at/selfcode.html)
    1. Aber sicher hab ich des schon gesehen ...

      http://www.sony.de/view.x?cat=14935&prod=26495&loc=de_DE -> Seite drucken -> Fenster schliessen

      Gruss Reto

      1. Hallo Reto,

        http://www.sony.de/view.x?cat=14935&prod=26495&loc=de_DE -> Seite drucken -> Fenster schliessen

        das Fenster hat keinerlei History und wurde auch per js geöffnet (wobei ich mir nicht sicher bin, ob letzteres ein Grund ist).

        Grüße aus Nürnberg
        Tobias

        --
        sh:( fo:) ch:? rl:( br:< n4:& ie:% mo:| va:) de:] zu:) fl:( ss:| ls:[ js:|
        (Selfcode -> http://emmanuel.dammerer.at/selfcode.html)
        1. Hallo Tobias, Hallo Reto,

          wurde auch per js geöffnet (wobei ich mir nicht sicher bin, ob letzteres ein Grund ist).

          Etwas »Aufklärungsarbeit«:

          1. Jegliches Fenster, das mit JS geöffnet wurde, kann ohne Nachfrage auch
             mit JS wieder geschlossen werden.
          2. Bei jeglichem Fenster, das nicht mit JS geöffnet wurde, wird in einigen
             Browsern eine Nachfrage kommen, wenn man es versucht zu schließen.

          Ich sollte vielleicht noch erwähnen, dass man im Internet Explorer den Punkt zwei umgehen kann: http://www.xs4all.nl/~ppk/js/croswin.html#closingopener

          Christian

          --
          Hast Du einen Beitrag? Nur her damit!
          http://aktuell.de.selfhtml.org/tippstricks/beitrag.htm
          SELF-Code: (http://emmanuel.dammerer.at/selfcode.html)
          sh:) fo:) ch:] rl:( br:> n4:& ie:% mo:) va:) de:] zu:) fl:( js:| ss:) ls:[