Per PHP-Skript ein POST an ein externes Loginformular senden und Cookies setzen

  • PHP

Es gibt 33 Antworten in diesem Thema. Der letzte Beitrag () ist von Marcus Gräfe.

    Ich habe nun ein XAMPP auf meinem Windows-PC aufgesetzt und dort kann ich SSL aktivieren. Wie sich rausstellte, war das aber nicht das Problem, sondern ich musste jQuery auf Version 2.x aktualisieren. Nun kommt kein Fehler mehr. Und tatsächlich wird nun das load-Ereignis aufgerufen (war vorher nicht der Fall).

    Aber er füllt die Felder nicht, obwohl die Befehle nacheinander durchlaufen und keine Fehler produzieren.

    EDIT: Ein alert($('#user', frContent).attr('id')); gibt mir undefined aus. Also kann ich wohl doch nicht auf die Inhalte des Frames zugreifen.

    EDIT 2: Hier mein aktueller (noch nicht funktionierender) Code:

    HTML-Quellcode

    1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    2. <html>
    3. <head>
    4. <title>Login...</title>
    5. <script type="text/javascript" src="jquery2.js"></script>
    6. </head>
    7. <body>
    8. <script type="text/javascript">
    9. // Unsichtbaren iframe erstellen und dokument anfügen
    10. var fr = document.createElement("iframe");
    11. fr.style.display = "inline-block"; // für Debugzwecke, später none
    12. document.body.appendChild(fr);
    13. // reagieren, sobald dieser geladen ist.
    14. $(fr).load(function() {
    15. var frContent = $(fr).contents();
    16. // Mit dem Inhelt des Frames arbeiten
    17. $('#user', frContent).val("x"); // Input-Felder im frame befüllen
    18. $('#password', frContent).val("y");
    19. $('#f', frContent).submit(function() {
    20. window.location= "https://intranet-startseite"; // Nach Form-submit auf Zielseite weiterleiten
    21. });
    22. });
    23. fr.src = "https://intranet-loginseite"; // frame zur Loginseite navigieren
    24. </script>
    25. </body>
    26. </html>

    Es gibt, wie gesagt, keinerlei Fehlermeldungen und im IFrame ist die Loginseite sichtbar, aber es wird nichts ausgefüllt.
    Besucht auch mein anderes Forum:
    Das Amateurfilm-Forum

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „Marcus Gräfe“ ()

    Was gibt denn $('#user', frContent) zurück? Und bist du dir sicher, dass die Felder eine ID haben? Wenn es nämlcih kein INput-Feld mit der ID user gibt, dann ists klar, dass attr('id') auch undefiniert ist.
    Von meinem iPhone gesendet
    Die Felder haben definitiv eine ID, habe das geprüft. Die ID-Bezeichnungen sind auch korrekt. Die Rückgabe des genannten kann ich leider erst am Montag prüfen.
    Besucht auch mein anderes Forum:
    Das Amateurfilm-Forum
    Hy, wie wäre es ein Cockie auf dem User pc zu speichern, und diesen mit der Anderen Seite auszulessen, so das man gar nicht mit post arbeiten muss ?
    Meine Projekte Genesis Game Engine | GFX | smartli.me - Der smarte URL shortener

    @Andy16823: Ja du hast die Ahnung worum es geht lol ^^

    @Marcus: Sowas geht auch nicht mehr, das wird durch den browser und die Sicherheitsrichtlinien auch geblockt. Habe sowas auch mal probiert und konnte dann nicht auf den iFrame zugreifen, weil es ein anderer Host ist und somit auch ne Fehlermeldung kam.

    Aber du musst ja auch die Seite nicht im iFrame laden, wichtig ist ja nur, dass die Logindaten an das Script geschickt werden, also bau das Login mit selben Namen der Textelemente einfach nach und gibt als Action die URL an wohin die Post Daten geschickt werden sollen. Als Target kannst du dann den iFrame anlegen, dann wird der Login im iFrame ausgeführt.

    Edit: Problematisch wird es nur wenn in der Form auf der Seite eine art SessionID Generiert wird die mitgeschickt werden muss.
    wie wäre es mit Java Script

    Quellcode

    1. var request = new XMLHttpRequest();
    2. request.open('post', 'PhpScript.php', true);
    3. request.send(username=Test&Kennwort=Test);
    Meine Projekte Genesis Game Engine | GFX | smartli.me - Der smarte URL shortener

    Dodo schrieb:

    also bau das Login mit selben Namen der Textelemente einfach nach und gibt als Action die URL an wohin die Post Daten geschickt werden sollen

    Exakt so habe ich es ja bisher gemacht. Nur hat das den Nachteil, dass ich nicht weiß, wann der Login beendet ist. Daher gibt's nun einfach eine 5-sekündige Wartezeit per JS. Meist dauert der Login aber nur eine halbe Sekunde und trotzdem muss man 5 Sekunden warten. Dauert er mal 6 Sekunden, so funktioniert der Login nicht.
    Besucht auch mein anderes Forum:
    Das Amateurfilm-Forum

    nikeee13 schrieb:

    Kannst du das, was du bisher gemacht hast, mal posten?

    HTML-Quellcode

    1. <html>
    2. <head>
    3. <title></title>
    4. </head>
    5. <body>
    6. Bitte warten...<iframe src="about:blank" width="0" height="0" name="loginframe"></iframe>
    7. <form method="post" action="https://.../login_post.yaws" name="f" target="loginframe">
    8. <input type="hidden" name="user" value="x">
    9. <input type="hidden" name="password" value="y">
    10. <input type="hidden" name="authmethod" value="default">
    11. <input type="hidden" name="url" value="">
    12. </form>
    13. <script type="text/javascript">
    14. self.document.forms['f'].submit();
    15. window.setTimeout("document.location.href='<? echo $_SERVER['HTTP_REFERER'] ?>'", 5000);
    16. </script>
    17. </body>
    18. </html>

    Dodo schrieb:

    Du kannst doch im iFrame den Document Complete Status abfragen

    Ich werde schauen, ob mir das weiterhilft.

    Dodo schrieb:

    ggf. dürfte das Auslesen des HTML Quelltextes des iFrames auch funktionieren

    Das glaube ich nicht. Ich denke, dass das genau so unterbunden wird, wie das Posten.
    Besucht auch mein anderes Forum:
    Das Amateurfilm-Forum
    Wenn das so funktioniert, dann könnte man das so erweitern:

    HTML-Quellcode

    1. <!DOCTYPE html>
    2. <html>
    3. <head>
    4. <title>Anmeldung</title>
    5. </head>
    6. <body>
    7. Bitte warten...
    8. <iframe src="about:blank" width="0" height="0" name="loginframe" id="loginframe"></iframe>
    9. <form method="post" action="https://.../login_post.yaws" name="f" target="loginframe">
    10. <input type="hidden" name="user" value="x">
    11. <input type="hidden" name="password" value="y">
    12. <input type="hidden" name="authmethod" value="default">
    13. <input type="hidden" name="url" value="">
    14. </form>
    15. <script type="text/javascript">
    16. var loginForm = document.forms['f'];
    17. var loginFrame = document.getElementById('loginframe'); // Habe oben noch ein Id-Attribut hinzugefügt
    18. if(typeof loginForm !== 'undefined' && typeof loginFrame !== 'undefined')
    19. {
    20. // Statt mit setTimeout zu warten hier auf das load-Ereignis reagieren
    21. loginFrame.onload = function() {
    22. document.location.href = "<? echo $_SERVER['HTTP_REFERER'] ?>";
    23. };
    24. }
    25. else
    26. {
    27. alert('Es ist ein Fehler aufgetreten. Bitte wenden Sie sich an den Systemadministrator.'); // ;-)
    28. }
    29. loginForm .submit();
    30. </script>
    31. </body>
    32. </html>


    Wenn das geht, könnte man auch auf JQuery verzichten. Ich habe es aber nicht getestet.
    Von meinem iPhone gesendet