Verständnisfrage $_SESSION Variablen

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Verständnisfrage $_SESSION Variablen

    Hallo!

    es hängt mal wieder. Ich habe eine Frage.

    Hier der Code:

    Quellcode

    1. $_SESSION['cusid'] = $_POST["customerID"];
    2. $_SESSION['passwd'] = $_POST["password"];
    3. function checklogin($cusid,$passwd)
    4. {
    5. $client = new SoapClient( "URI/Service.asmx?WSDL",array("trace" => 1, "exceptions" => 1));
    6. $send->customerID = $cusid;
    7. $send->password = $passwd;
    8. $myres = $client->VerifyPassword($send);
    9. $status = $myres->VerifyPasswordResult;
    10. return $status;
    11. }
    Alles anzeigen



    Kann mir jemand sagen wie ich das lösen kann?

    Danke schonmal für eure Geduld mit mir :)

    Matthias
    Das Leben ist binär - du bist eine 1, oder eine 0
  • Sag doch mal was du wissen willst?

    Bekommste ein Error oder was verstehst du nicht? Was soll der Code machen? Was macht er nicht?

    Ach ja und auserdem gibt der Code nen error weil $send das Objekt wird ehr denke ich mal nicht finden...

    So wie es aussieht prüft die Funktion ob das PW richtig ist... Aber wie gesagt was willst du wissen :)
    Erst wenn der letzte FTP Server kostenpflichtig, der letzte GNU-Sourcecode verkauft, der letzte Algorithmus patentiert, der letzte Netzknoten kommerzialisiert, die letzte Newsgroup moderiert wird, werdet Ihr merken, dass man mit Geld allein nicht programmieren kann.
  • Hi!

    Merci für die Antwort :) Also, was ich nicht verstehe:

    Die $_POST's kommen aus nem Formular welches die do_login.php aufruft aus welcher der Code stammt. Nun verstehe ich das folgendes passier(t)en sollte:

    Die per Post übergebenen Daten sollen als Session Variable gespeichert werden. Und im folgenden dann eben den Wert darstellen. Anscheinend muss man die Seite aber zweimal aufrufen, weil beim ersten mal bekomme ich folgenden Output:


    Notice: Undefined variable: cusid in /srv/www/web2/html/provisioning/init.php on line 49

    Notice: Undefined variable: passwd in /srv/www/web2/html/provisioning/init.php on line 50

    Drücke ich dann auf F5 bekomme ich diese Meldungen nicht mehr.

    Wie also muss ich die Sessionvariable erstellen damit sie auf der selben Seite erstellt und genutzt werden kann, geht das überhaupt?

    Matthias
    Das Leben ist binär - du bist eine 1, oder eine 0
  • Wo kommt denn der Fehler? Innerhalb der funktion, oder vor dem Funktionsaufruf, denn die Session-Varialbe wird in der Funktion nicht verwendet. Sprich die Session-Variable hat mit deiner gepostet Funktion nichts zu tun. Die Session-Variable ist auch richtig gesetzt, desswegen verstehe ich das Problem nicht ganz...
    Erst wenn der letzte FTP Server kostenpflichtig, der letzte GNU-Sourcecode verkauft, der letzte Algorithmus patentiert, der letzte Netzknoten kommerzialisiert, die letzte Newsgroup moderiert wird, werdet Ihr merken, dass man mit Geld allein nicht programmieren kann.
  • Hi!

    Okay, dann ist mein fehler wohl hier:

    Ich denke das ich mit:

    $_SESSION['cusid'] = $_POST["customerID"];
    $_SESSION['passwd'] = $_POST["password"];

    Die Sessionvariable cussid mit dem wert aus $_POST["customerID"] erstelle
    Die Sessionvariable passwd mit dem wert aus $_POST["password"] erstelle

    Und hier in der Funktion checklogin mit:

    $send->customerID = $cusid;
    $send->password = $passwd;

    dann auf die Sessionvariable zugreife, ist das nicht so?

    Matthias
    Das Leben ist binär - du bist eine 1, oder eine 0
  • Nein das ist nicht richtig, was du machst ist eine zuweisung.

    $send->customerID = $cusid;

    bedeutet, das du der Variable customerID im Objekt send den Wert von $cusid zuweist. Dessweiteren hast du $cusid nirgends definiert...

    Und deine function checklogin erwartet 2 Werte, übergibst du 2 Werte?
    Erst wenn der letzte FTP Server kostenpflichtig, der letzte GNU-Sourcecode verkauft, der letzte Algorithmus patentiert, der letzte Netzknoten kommerzialisiert, die letzte Newsgroup moderiert wird, werdet Ihr merken, dass man mit Geld allein nicht programmieren kann.
  • Quellcode

    1. $_SESSION['cusid'] = $_POST["customerID"];
    2. $_SESSION['passwd'] = $_POST["password"];
    3. function checklogin()
    4. {
    5. $client = new SoapClient( "URI/Service.asmx?WSDL",array("trace" => 1, "exceptions" => 1));
    6. $send->customerID = $_SESSION['cusid'];
    7. $send->password = $_SESSION['passwd'];
    8. $myres = $client->VerifyPassword($send);
    9. $status = $myres->VerifyPasswordResult;
    10. return $status;
    11. }
    Alles anzeigen


    Ich nehme an, das Du checklogin falsch aufrufst, leider geht das aus Deinem geposteten Code nicht hervor. Eine mögliche Lösung wäre evtl die oben, wobei ich absolut nichts davon halte Passwörter in einer Session zu speichern...

    70abc

    @JFoX: Sorry für die Überschneidung...
    We raise hopes, here ... until they're old enough to fend for themselves.
    - Mike Callahan
  • Mal zum Vergleich... Das ist meine Login-Klasse:

    Check

    Quellcode

    1. if (($login->incomdeUserData($username, $password)) == true) {
    2. echo "Login erfolgreich!<br /> Willkommen ".$_SESSION['s_user']."";
    3. } else {
    4. echo "Der Login war nicht erfolgreich, bitte &uuml;berpr&uuml;fen Sie Ihre Eingabe!";
    5. }


    Klasse

    Quellcode

    1. public function incomdeUserData($username, $password)
    2. {
    3. global $db;
    4. global $secure;
    5. $salt =& $db->query("SELECT salt FROM users WHERE username='".$username."'");
    6. while ($tmp =& $salt->fetchRow()) {
    7. $salt_en = $secure->incomeEncryptString($tmp['0']);
    8. }
    9. $password_en = $secure->incomeEncryptString($password);
    10. $key = $salt_en
    11. . = $password_en;
    12. $key = $secure->incomeEncryptString($key);
    13. $stmt = "SELECT COUNT(*) FROM users WHERE username='".$username."' AND password='".$key."'";
    14. $result =& $db->query($stmt);
    15. while ($row =& $result->fetchRow()) {
    16. switch ($row[0]) {
    17. case 0:
    18. $this->login = false;
    19. break;
    20. case 1:
    21. $this->login = true;
    22. $_SESSION['s_user'] = $username;
    23. $db->query("UPDATE users SET session='".session_id()."' WHERE username='".$_SESSION['s_user']."'");
    24. break;
    25. default:
    26. $this->login = false;
    27. }
    28. }
    29. return $this->login;
    30. }
    Alles anzeigen
    Erst wenn der letzte FTP Server kostenpflichtig, der letzte GNU-Sourcecode verkauft, der letzte Algorithmus patentiert, der letzte Netzknoten kommerzialisiert, die letzte Newsgroup moderiert wird, werdet Ihr merken, dass man mit Geld allein nicht programmieren kann.
  • Hi!

    Quellcode

    1. $send->customerID = $_SESSION['cusid'];
    2. $send->password = $_SESSION['passwd'];


    Ich verstehe nicht wieso die Sessionvariable nicht mit "cussid" verfügbar ist. auf anderen Seiten kann ich Sie ja auch so nutzen, oder? Session Variablen (welche einmal gesetzt sind) können doch wie normale Variablen über deren Namen angesprochen werden, oder?

    Matthias
    Das Leben ist binär - du bist eine 1, oder eine 0
  • Nein,

    eine Sessionvariable ist eine Sessionvariable :)

    $a = 3 <-- ist eine Variable
    $_SESSION['a'] = 5 <--- eine Sessionvariable

    und genau so muss man die auch ansprechen. Probiers aus, setzte doch mal ein echo vor beide Variablen dann wirst du sehen was raus kommt.
    Erst wenn der letzte FTP Server kostenpflichtig, der letzte GNU-Sourcecode verkauft, der letzte Algorithmus patentiert, der letzte Netzknoten kommerzialisiert, die letzte Newsgroup moderiert wird, werdet Ihr merken, dass man mit Geld allein nicht programmieren kann.
  • "RealFairPlayer" schrieb:

    Hi!

    Also, nur nochmal für doofies wie mich zum mitschreiben. Wenn ich $_SESSION['verstanden'] = "glaube ich" mache .... habe ich auf jeder Seite welche ein SESSION_START(); enthält die Sessionvariable ... muss sie aber trotzdem immer mit $_SESSION['verstanden']ansprechen.

    Habe ich das richtig verstanden?

    Matthias


    Wenn "register_globals" in der php.ini deaktiviert ist, was zu empfehlen ist, dann ist das richtig. Ist "register_globals" aktiviert, dann geht's auch mit $verstanden.

    Siehe auch hier: php.net/manual/de/ini.core.php#ini.register-globals

    70abc
    We raise hopes, here ... until they're old enough to fend for themselves.
    - Mike Callahan
  • wie 70abc das schon RICHTIG gesagt hat, ist dass definitiv nicht zu empfehlen...

    Mal ganz vorsichtig erklärt (ich weiß ist nicht 100% korrekt aber man versteht einigermaßen was gemeint ist)

    Quellcode

    1. <?php
    2. $a = 1;
    3. ?>


    So $a ist nun in deinem gesammten Dokument gültig. Wenn du $a auch in einer Funktion verweden willst musst du $a übergeben.

    Quellcode

    1. <?php
    2. function foo($a) {
    3. $a++;
    4. $b = 5;
    5. return $a;
    6. }


    So nun ist $a auch in einer Funktion verfügbar. Warum? Weil verwendete Variablen in einer Funktion auch nur innerhalb der Funktion gültig sind (Gültigkeitsbereich)

    Da du mit return $a wieder zurück lieferst, kannst du sie auch wieder verwenden, jedoch hast du KEINEN zugriff auf $b, da sie nicht zurückgeliefert wird. FAZIT; $b ist nur innerhalb von foo gültig und nicht ausserhalb.

    So, wenn du $a sehr oft verwendest musst du sie immer übergeben, ab einem gewissen Zeitpunkt nervt das... Also "GLOBALISIERST" du $a einfach (ich weiß es ist falsch aber so versteht man es besser)

    Quellcode

    1. <?php
    2. $_SESSION['a'] = $a;
    3. ?>


    So nun kannst du "$a" auch innerhalb einer Funktion nutzen ohne sie zu übergeben

    Quellcode

    1. <?php
    2. function bar() {
    3. $_SESSION['a']+1;
    4. }
    5. ?>


    Nun wurder der Wert von der SESSION-Variable um 1 erhöht und du kannst sie wieder auserhalb verwenden...

    Was ist uns aufgefallen? Richtig wir haben nix an die Funktion bar() übergeben und sie hat auch keinen Rückgabewert (void(leer)).

    So ich hoffe das hilft dir etwas, um es besser zu verstehen.

    PS: manche begiffe sind falsch, ist mir gewusst, aber auf 3Seiten Text habe ich auch keine Lust, und so kann man es wenigstens etwas verstehen.

    so long

    JFoX
    Erst wenn der letzte FTP Server kostenpflichtig, der letzte GNU-Sourcecode verkauft, der letzte Algorithmus patentiert, der letzte Netzknoten kommerzialisiert, die letzte Newsgroup moderiert wird, werdet Ihr merken, dass man mit Geld allein nicht programmieren kann.
  • Habe meinen Post editiert, zufrieden? :twisted:

    // EDIT wie kann man sich darüber nur aufregen? In meinem Post geht es garnicht um Register-Globals, es seiden du hast bis auf den ersten Satz nix gelesen... Ich habe nur lediglich deinen Post als eine Einlietung für meinen Bestätigt, was ist daran so schlimm?
    Erst wenn der letzte FTP Server kostenpflichtig, der letzte GNU-Sourcecode verkauft, der letzte Algorithmus patentiert, der letzte Netzknoten kommerzialisiert, die letzte Newsgroup moderiert wird, werdet Ihr merken, dass man mit Geld allein nicht programmieren kann.
  • Ja ;)

    Wobei der Hauptgrund, warum man "register_globals" nicht verwenden sollte eigentlich ein andere ist:

    Werte die aus $_GET, $_POST, $_REQUEST kommen werden normaler weise als unsicher eingestuft, da sie sich manipulieren lassen. Daher müssen diese Variablen vor der Weiterverarbeitung auf schädlichen Inhalt geprüft werden.

    Ist "register_globals" eingeschaltet, kann ich nicht mehr wirklich zwischen "sicheren" und "unsicheren" Variablen unterscheiden, da ich jede Variable über die URL oder gefälschte POST Daten manipulieren kann.

    70abc
    We raise hopes, here ... until they're old enough to fend for themselves.
    - Mike Callahan