Frage zu Konstanten

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

  • Frage zu Konstanten

    Hallo!
    Ich möchte bei meinem Loginscript die Benutzter ID bzw. die Kundennummer in eine Session speichern um später damit arbeiten zu können. Es ist mir dabei extrem wichtig, dass die Benutzer ID nicht geändert werden kann. Da sich die ID ja nicht ändert, werde ich sie als Konstante in eine Session speichern. Kann die Benutzer ID eigendlich irgendwie durch einen User geändert werden, oder wird ein Fehler zurückgegeben, wenn man versucht die Konstante neu zu definieren? Also, wenn z.B.: jemand versucht die Konstante über ein eigabeformular zu ändern.

  • #2
    Re: Frage zu Konstanten

    Original geschrieben von nobody2
    Hallo!
    Ich möchte bei meinem Loginscript die Benutzter ID bzw. die Kundennummer in eine Session speichern um später damit arbeiten zu können. Es ist mir dabei extrem wichtig, dass die Benutzer ID nicht geändert werden kann. Da sich die ID ja nicht ändert, werde ich sie als Konstante in eine Session speichern. Kann die Benutzer ID eigendlich irgendwie durch einen User geändert werden, oder wird ein Fehler zurückgegeben, wenn man versucht die Konstante neu zu definieren? Also, wenn z.B.: jemand versucht die Konstante über ein eigabeformular zu ändern.
    Konstante in einer Session speichern? Du hast Konstanten nicht verstanden. Dein Vorhaben funktioniert nicht...

    Nutz OOP und bastel dir eine globale Singleton-Klasse die ein Interface zur Session darstellt, da kannst du dann eine Methode definieren, welche dir nur die user-id zurück gibt und die Eigenschaft in der Klasse als privat deklarieren ... so würde ich es jetzt machen

    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
      Mittlerweile, gehe ich einen Schritt weiter, und lege ein Singleton-User-Objekt direkt in $_SESSION ab..

      Default:
      userid: 0 username: Gast
      Das Objekt kann nur mit gültigem Usernamen und Passwort seinen Zustand ändern..

      Das fluppt ganz gut...
      Wir werden alle sterben

      Kommentar


      • #4
        Original geschrieben von combie
        Mittlerweile, gehe ich einen Schritt weiter, und lege ein Singleton-User-Objekt direkt in $_SESSION ab..
        Das dachte ich mir auch ein paar Mal, aber abgesehen davon, dass ich diese komplette Funktionalität von Objekten in Session als unausgereift betrachte (>_>), dachte ich mir, dass es mehr Sinn machen würde von wegen lose Bindung...
        Ggf. kann man nämlich einfach die entsprechende Array-Struktur von der Session in einer Klasse ändern, und so eventuell weitere externe Projekte einfach einbinden, anstatt, dass man überall im Code was ändern muss, weil das Objekt direkt aus der Session heraus genutzt wird ... verstehst du? ^^; *etwas unglücklich ausdrückt*

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

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

        Kommentar


        • #5
          Hier mal ein kleines Beispiel aus meinem Bastelkästchen..
          Das fluppt so unter PHP 4+5..
          Wichtig ist, daß die Klasse "user" VOR session_start geladen wird!!
          PHP-Code:
          <?php
          error_reporting
          (E_ALL);

          // festlegen,  wo die Klassen in $_SESSION liegen
          define('SESSION_CLASS_KEY','singleton_classes');


          class 
          user
          {
            var 
          $id=0// private
            
          var $name='Gast'// private
            
          var $hits=0// private
            
            
          function __wakeup() // public
            
          {
              
          $this->hits++;
            }
            
            function 
          get_hits() // public
            
          {
              return 
          $this->hits;
            }

            function & 
          getInstance($start_session=TRUE// public static
            
          {
              
          $selbst __CLASS__;
              if(
          $start_session && '' == session_id())
                    
          session_start(); // wenn noch nicht geschehen
              
          if(empty($_SESSION[SESSION_CLASS_KEY][$selbst]))
                  
          $_SESSION[SESSION_CLASS_KEY][$selbst] = & new $selbst;
              return 
          $_SESSION[SESSION_CLASS_KEY][$selbst];
            }
            
            
          // weitere Methoden
          }


          // testcode
          $user = & user::getInstance();
          echo 
          "hits: ".$user->get_hits()."<br>";
          ?>
          Zuletzt geändert von combie; 25.12.2006, 19:28.
          Wir werden alle sterben

          Kommentar


          • #6
            Ich kapier den ganzen Aufwand gar nicht. Wenn man selber ein Script schreibt bei dem man will das die UserID nie gesetzt wird außer beim Login, wieso lässt man Sie dann noch sonst einfach in Ruhe? Das einzige was ich mir vorstellen könnte ist, dass du in einem großen Team arbeitest und dort einige Deppen sind, die klare Anweisungen nicht verstehen, aber sonst.
            Nur wenige wissen, wieviel man wissen muss, um zu wissen, wie wenig man weiß.

            Kommentar


            • #7
              Ich kapier den ganzen Aufwand gar nicht
              Witziger weise ist der Aufwand gar nicht so groß!

              Bei der Implementierung des MVC Patterns kann man das fix miterledigen..

              Warum auf Datenkapselung verzichten, wenn doch die Sprache viele Möglichkeiten dazu bietet?

              <ironie>
              Klar, kannst du weiter mit dem Faustkeil in der Hand jagen gehen....
              </ironie>
              Zuletzt geändert von combie; 26.12.2006, 14:06.
              Wir werden alle sterben

              Kommentar


              • #8
                Es gibt aber z.B. so tolle Feinheiten, dass irgendwo versehentlich auf Daten zugegriffen wird.
                Z.B. register_globals in Kombination mit $_SESSION ist extremst geil...

                PHP-Code:
                $_SESSION['user_id'] = 5;
                $user_id 6;
                echo 
                $_SESSION['user_id']; // bringt 6 zur Ausgabe 
                den "Fehler" hab ich nach einem Jahr erst gefunden... auf der ersten Seite wo er aufgetreten ist war er nicht reproduzierbar, da hab ich irgendwann überall den Array-Key geändert, auf der zweiten Seite war er dann reproduzierbar (gott sei dank, denn die Seite war WESENTLICH größer als die erste ... "mal eben" alle Array-Keys zu ändern, wäre da nicht möglich gewesen ^^,) und wenn man sowas durch vernünftige Kapselung umgehen kann, bin ich immer dafür und sollte jeder andere Programmierer auch sein

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

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

                Kommentar


                • #9
                  den "Fehler" hab ich nach einem Jahr erst gefunden
                  Mein aufrichtiges Mitgefühl..!
                  Das ist eine bittere Erfahrung, die einen zum Denken zwingen muß.
                  In dem Maße bin ich noch nicht in diesen Teich gefallen, aber bei Integration von Scripten, aus verschiedensten Quellen, gehören diese unerwünschten Seiteneffekte leider zum täglichen Hüh und Hott.
                  Jede Strategie, um diese Probleme zu mildern, ist eine gute Strategie!

                  z.B. Halte den Namensraum sauber
                  1. Funktionalität und Daten sinnvoll in Objekte kapseln
                  2. Völliger Verzicht auf globale Variablen
                  Zuletzt geändert von combie; 26.12.2006, 14:37.
                  Wir werden alle sterben

                  Kommentar

                  Lädt...
                  X