Sessions und Frames

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

  • Sessions und Frames

    Beginn, in jedem Skript:
    PHP-Code:
    ini_set('register_globals''off');                // Sicherheit
    ini_set('session.use_cookies''0');            // Cookies nicht erlaubt
    session_name('sid');                                    // Eindeutige Session-Bezeichnung im Link
    session_start(); 
    Hauptframe:
    Da wir eine Template-Engine anwenden, fasse ich den Prozess zusammen: ja, ich erstelle zwei Frames und diese übernehmen die richtige SID. Die SID kann ich in den Frameseiten auslesen, so weit stimmt alles, es wird richtig weiter geleitet. Das Hauptframe erstellt die SID, wenn keine zur Verfügung steht.

    Beispielwert:
    PHP-Code:
    $_SESSION['USER_NAME'] = 'test'
    Unterframe1:
    SID ok.
    PHP-Code:
    $usr $_SESSION['USER_NAME']; 
    da ich annehme, dass USER_NAME in der SessionId festgehalten wurde, jedoch nichts. Leer.

    Unterframe2:
    Genauso.

    Gebe ich das $_SESSION-Array mit print_r() aus, ist es in den Unterframes leer, trotzdem die SID richtig ist und ich die SID richtig ausgegeben bekomme.

    Missverstehe ich etwa das PHP-Konzept?

    Beispiel:
    Erstelle ich eine PHP-Datei mit $_SESSION['USER_NAME'] und den obigen Einstellungen, kann ich USER_NAME weiter im Skript auslesen. Führe ich das Skript allerdings noch mal aus, ist die Session bis auf die SID leer.
    PHP-Optionsfehler meinerseits? Browser?

    KEINE COOKIES. KEINE GLOBALS. Sicherheitsrichtlinien.

    (Alternativ könnt ich mir mein eigenes Session-System schreiben, das wiederum kostet Entwicklungszeit und Rechenzeit.)
    Zuletzt geändert von steini; 10.12.2005, 15:34.

  • #2
    Re: Sessions und Frames

    Original geschrieben von steini
    KEINE COOKIES. [...] Sicherheitsrichtlinien.
    *lol*
    Was soll denn an der Übergabe per URL sicherer sein, als an der per Cookie? ... mit der SID in der URL taucht die Session_id ja nur in allen möglichen Referern auf...




    wo setzt du die Variable?
    Und welches Skript erstellt jetzt die Session? Eine der Seiten die in dem Frameset angezeigt wird, oder das Frameset selbst?

    Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

    bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
    Wie man Fragen richtig stellt

    Kommentar


    • #3
      Re: Re: Sessions und Frames

      Was soll denn an der Übergabe per URL sicherer sein, als an der per Cookie?
      Denke mal darüber nach, weshalb Cookies abgeschaltet werden oder wie sicherheitsrelevante Nutzerdaten (Passwort, Benutzer) durch ein Cookie zugänglich sind.

      wo setzt du die Variable?
      Im Hauptframe. Es müsste doch alle Folgeskripten ebenso zur Verfügung stehen, wenn denn die gleiche SID bereit steht.

      Und welches Skript erstellt jetzt die Session? Eine der Seiten die in dem Frameset angezeigt wird, oder das Frameset selbst?
      Das Hauptframe wieder, wenngleich in jedem Folgeskript session_start() steht.

      ... Vielleicht bietet sich eine kleine DB-User-Session-Verwaltung doch an. Mal überlegen. Wir haben zu viel Freizeit.

      Kommentar


      • #4
        Re: Sessions und Frames

        Original geschrieben von steini
        Beginn, in jedem Skript:
        PHP-Code:
        ini_set('register_globals''off');                // Sicherheit 
        Völlig Nutzlos ! register_globals ist PHP_INI_PERDIR bzw. PHP_INI_SYSTEM, das heisst, du kannst dir den Code schenken, weil du den Parameter zur Scriptlaufzeit schon garnicht mehr ändern kannst. Sobald nämlich der erste Befehl bearbeitet wird, sind die Variablen schon registriert ...

        PHP-Code:
            if (!function_exists("version_compare")) {
                
        $gpc_order = @ini_get("gpc_order");
                
        $gpc_order = ($gpc_order) ? $gpc_order "gpc";
                
        $gpc_order str_replace("g"'$_GET, '$gpc_order);
                
        $gpc_order str_replace("p"'$_POST, '$gpc_order);
                
        $gpc_order str_replace("c"'$_GOOKIE, '$gpc_order);
                
        $gpc_order preg_replace("/, $/"""$gpc_order);
                
        $_GET     = &$HTTP_GET_VARS;
                
        $_POST    = &$HTTP_POST_VARS;
                
        $_COOKIE  = &$HTTP_COOKIE_VARS;
                
        $_SERVER  = &$HTTP_SERVER_VARS;
                
        $_ENV     = &$HTTP_ENV_VARS;
                
        $_SESSION = &$HTTP_SESSION_VARS;
                
        $_FILES   = &$HTTP_POST_FILES;
                eval (
        '$_REQUEST = array_merge('.$gpc_order.');');
            }

            if (@
        ini_get('register_globals')) {
                
        $vars array_merge($_REQUEST$_SERVER);
                foreach(
        $vars as $key => $elem) {
                    unset($
        $key);
                }
            } 
        Wenn, dann kannst du so register_globals = On IM Script aushebeln, aber garantiert nicht per ini_set() ...



        Und SID's klaut man über $_GET in der Regel besser als über nen Cookie. Ausserdem kannst du dem Cookie ja die Lifetime '0' geben. Damit wird er gelöscht, wenn der Browser geschlossen wird.
        Zuletzt geändert von EEBKiller; 10.12.2005, 17:35.

        Kommentar


        • #5
          Re: Re: Re: Sessions und Frames

          Original geschrieben von steini
          Denke mal darüber nach, weshalb Cookies abgeschaltet werden oder wie sicherheitsrelevante Nutzerdaten (Passwort, Benutzer) durch ein Cookie zugänglich sind.
          wer speichert denn sowas in einem Cookie
          da wird eine unique-id drin gespeichert, anhand der man auf dem Server die zugehörigen Daten bekommt...

          Im Hauptframe. Es müsste doch alle Folgeskripten ebenso zur Verfügung stehen, wenn denn die gleiche SID bereit steht.
          nein, denn du weißt nicht in welcher Ordnung der Browser das Frameset läd.
          1. Möglichkeit
          Frameset, Navigation, Hauptseite
          2. Möglichkeit
          Frameset, Hauptseite, Navigation

          D.h. für einen richtigen Test musst du die Variable im Frameset schon setzen


          ... Vielleicht bietet sich eine kleine DB-User-Session-Verwaltung doch an. Mal überlegen. Wir haben zu viel Freizeit.
          hat doch überhaupt nix mit dem save_handler der session zutun, wenn du versuchst die Variable auszulesen bevor sie gesetzt wird, weil sich die Skripte in einer anderen Reihenfolge laden, bzw. geladen werden vom Browser

          Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

          bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
          Wie man Fragen richtig stellt

          Kommentar


          • #6
            Re: Re: Re: Re: Sessions und Frames

            nein, denn du weißt nicht in welcher Ordnung der Browser das Frameset läd.
            1. Möglichkeit
            Frameset, Navigation, Hauptseite
            2. Möglichkeit
            Frameset, Hauptseite, Navigation
            Ok.

            D.h. für einen richtigen Test musst du die Variable im Frameset schon setzen
            Setzte ich sie denn nicht damit?
            PHP-Code:
            $_SESSION['USER'] = 'test'
            Bei Cookies benötige ich setcookie() und hier?

            Gehe mal davon aus, dass es verboten ist Cookies einzusetzen und dass GLOBALS Bedenken äußern. Lösungsvorschläge?

            Ich denke nämlich, es müsste möglich sein die Werte des einen Skriptes durch alle Skripte zu schleusen, nähme ich denn bloß eine eindeutige SessionId, dachte ich, was irgendwo das Session-Konzept ist. Oder?

            Kommentar


            • #7
              Re: Re: Re: Re: Re: Sessions und Frames

              hab mal ein Beispiel angehängt, welches bei mir einwandfrei funktioniert, auch mit geblockten Cookies + Screenshot des Aufrufs

              ehrlich, ka, was du für ein Problem hast
              Angehängte Dateien

              Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

              bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
              Wie man Fragen richtig stellt

              Kommentar


              • #8
                @steini
                warum verzichtest du eigentlich nicht komplett auf frames?
                INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


                Kommentar


                • #9
                  OffTopic:
                  Original geschrieben von Abraxax
                  @steini
                  warum verzichtest du eigentlich nicht komplett auf frames?
                  weil Framesets coo~l sind

                  blockieren beim File-Session-save-Handler (der Standard) ja nur das Laden der Seiten *hust*

                  Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

                  bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
                  Wie man Fragen richtig stellt

                  Kommentar


                  • #10
                    Gelöst.

                    Problem war, dass die Session-Werte in den nachfolgenden Seitenaufrufen nicht zu sehen waren, wie als ob gelöscht oder nie gesetzt. Wie als verwende man Cookies und deaktiviere diese im Browser. Das Session-Prinzip war damit dahin.

                    session_unset()

                    Mit session_unset() lösche ich alle Sessionvariablen zum Skriptende. Das hat den Vorzug, dass mir unliebsame Werte eines anderen Entwicklers entfernt werden, außer er registriert in der dafür vorgesehenen Page-Klasse seine Variable als 'static', dann wird sie dem Session-Werte-Pool wieder hinzufügt, nach dem alle Werte entfernt wurden. Dazu speichere ich essenzielle Daten - die static-Variablen, beispielsweise user, password etc. - in einem temp. Array. Nach dem session_unset() füge ich die static-Variablen mit den static-Namen wieder hinzu. Ich lösche die Werte, um unliebsame Werte eindeutig zu entfernen, weil wir Formwerte teils auch mit Session-Variablen handhaben.

                    Fehler: Eines der static-Arrays, welche mit array_push() temp. gefüllt werden, wurde eingangs nicht als = array() definiert. PHP murkste nicht herum. Sollte jedoch, wie jede wichtige Sprache. Der Fehler ist damit behoben.

                    Frames

                    Frames werden in der OOS-Gemeinde zu Unrecht verpönt. Es ist, als scrolle ich mein gesamtes Browserfenster nach unten und die Leiste die wir jetzt alle oben sehen: Adressleiste des Browser, Buttons, hoffentlich Mozilla, verschiebt sich mit ins unsichtbare Oben, wie beispielsweise die PHP-Resource-Seite-Links dieser Homepage, wenn ich einen Eintrag ansehe. Eine sehr unlogische Handhabung, weil wie gesagt, wichtige Teile der Anwendung plötzlich verschwinden und ich mich erst zurück bewegen muss um eine neue Aktion zu starten. Den möcht ich sehen, der Spaß dabei hat die Adressleiste seines Browsers immer auf der eigentlichen Homepage oben eingeben zu müssen und wenn er anderswo gehen möchte, müsse er - gleich wo er auf der Homepage ist - seinen Browser wieder nach oben scrollen, um die erforderliche Adressleiste zu finden. Darum ist ja die Adressleiste standardmäßig sichtbar, genauso wie die Menüeinträge. IFRAMEs sind in meiner Problemkonstellation unbrauchbar. Die Nerd-Homepages ohne Frames also mögen einfacher zu entwickeln sein, sind jedoch unbrauchbar geht es um reine Oberflächenbedienung. Bastle ich mir mit JavaScript was zurecht, scheitere ich an der Deaktivierung von JavaScript im Intranet eines größeren Unternehmens. Eine Frage der Benutzerführung. Ist der Kunde ein milliardenschweres Unternehmen ! und sollen mit deiner Anwendung ebenso viele Moneten indirekt durch die Leitung geschaltet werden, sollen viele Entwickler und nicht nur ein Autodidakt-Skript-Kid innerhalb zwei Jahren eine Anwendung kreieren, ...

                    Kommentar


                    • #11
                      Original geschrieben von steini
                      Frames werden in der OOS-Gemeinde zu Unrecht verpönt.
                      Informiere dich doch bitte, bevor du Quark laberst.

                      Frames sind dann "verpöhnt", wenn sie für etwas anderes missbraucht werden als das, wozu sie ursprünglich gedacht waren: Zur parallelen Anzeige mehrerer unabhängiger Dokumente.


                      Dein Wunsch nach nicht wegscrollenden Bereichen ist natürlich nachvollziehbar. Aber wenn diese Bereiche zur Seite hinzugehören - eine Navigationsleiste beispielsweise - dann rechtfertig an dieser Stelle nichts den Einsatz von Frames, siehe oben - weil die Navigation eben Bestandteil (auch) dieses Dokumentes ist, und kein davon unabhängiges, eigenständiges.
                      Es handelt sich also überhaupt nicht mehr um einen der Fälle, für die Frames gedacht sind - sondern lediglich um eine optische Formatierung. Diese ist per CSS zu erreichen - in diesem Falle vermutlich idR. über position:fixed.
                      Jetzt kommt dein Einwand, dass der IE dies nicht beherrscht. Ja, ist richtig - "rechtfertigt" den Einsatz von Frames dafür aber auch noch nicht, da sie in diesem Falle lediglich ein Workaround zur Behebung dieser Schwäche eines Browsers wären. Und für position:fixed im IE gibt es CSS-Workarounds, ganz ohne Frames.
                      I don't believe in rebirth. Actually, I never did in my whole lives.

                      Kommentar


                      • #12
                        Die Nerd-Homepages ohne Frames
                        *lol*
                        Ich hab schon so geile Seiten gesehen, die komplett ohne Frames funktionieren, wohingegen mich eine Seite MIT Frames bis jetzt NOCH NIE überzeugt hat !
                        Schonmal probiert so eine Seite zu bookmarken?

                        Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

                        bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
                        Wie man Fragen richtig stellt

                        Kommentar

                        Lädt...
                        X