• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Per PHP in htaccess einloggen

aJunkie

Mitglied
Hallo,

ich probiere mich an einem Projekt.

Der normaler User muss sich über Htaccess einloggen.

Um mir aber die Arbeit zu vereinfachen, wollte ich, dass ich als Admin mich nicht noch ein zweites Mal einloggen muss. Erster Login ist nur PHP, zweiter ist eben htaccess.

Kann ich mich per PHP (header?) in htaccess einloggen, dass der Zugang schon vordefiniert ist.

http://USER:[email protected]/members
 
Die Schwierigkeit besteht darin, den Client (also den Browser) dazu zu bringen, den Login-Request zu senden. Wenn du diesen vom Server aus sendest (also per PHP), loggst du nicht den Client ein, sondern der Server spielt Client und loggt sich selbst unter deinem Nutzernamen ein.

Eine Idee wäre es, ein JavaScript anzustoßen, das den Request abschickt:

HTML:
<!DOCTYPE html>

<html>

    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
        <title>New</title>
        <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
        <script type="text/javascript">

$(document).ready(function() {
    $.ajax({
        type: "GET",
        url: "./geheim/",
        username: 'test',
        password: 'test'
    });
});

        </script>
    </head>

    <body>

    </body>

</html>
 
Hmm.
Mir ist das recht egal, ob der Server (localhost, selbe IP Adresse) oder der Client eingeloggt wird.

Wenn ich im Browser eingeloggt bin, ist alles klar.
Ich habe nicht daran gedacht, dass das ein Problem darstellt, wenn ich paar Funktionen in PHP schreibe und im selben Browser im neuen Tab öffne. "PHP" muss sich wohl selbst noch mal einloggen.


Edit: Mein genaues Vorhaben:
Ich habe ein Premiumaccount zu legal erworbenen Dateien (zum Beispiel: pdf, mp3, etc.).
Diese kann ich eben runterladen. Die absolute URL zu den Dateien ist ersichtlich.
Nur ist es anstrengend, ständig ein Rechtsklick zu machen und auf "Ziel speichern unter".
Deswegen wollte ich das alles in einer while-Schleife machen, aber die Datei ist nicht zu erreichen, wenn man vorher nicht eingeloggt ist.

Das, was ich zu dem Thema finde, ist nur curl, was ich nicht beherrsche. :-(


Edit2: Aber eigentlich muss es funktionieren.
Ich starte das Script im selben Browser.

Wenn ich per Header auf die Seite weiterleite, bin ich immer noch eingeloggt.

Wenn ich also Funktionen zum Speichern aufrufe, sollte es gehen, was es aber nicht tut.
 
Zuletzt bearbeitet:
Mir ist das recht egal, ob der Server (localhost, selbe IP Adresse) oder der Client eingeloggt wird.

Ich habe leider meinen Testcode dazu bereits wieder gelöscht. Aber ich denke, es sieht so aus:

Statt "Server" hätte ich exakter "PHP-Serverscript" sagen können. Es wird -- meines Wissens, aber ich nutze .htpasswd sozusagen nie, bei Sessions wäre es aber so -- gewissermaßen nicht "rechnerweit" eingeloggt, sondern nur auf Verbindungsbasis, wobei jeder Client (dein PHP-Script zählt da als eigener Client) eine eigene Verbindung aufmacht. In etwa so, wie jeder einzelne Browser auf deinem Rechner eigene Sessions und Cookies verwaltet.

"PHP" muss sich wohl selbst noch mal einloggen.

Ja, genau.

Dazu hatte ich gestern auch was, das ich aber verworfen habe, weil es eben nur das PHP-Serverscript einloggt und ich dachte, du wolltest den Browser einloggen.

Mit fsockopen sollte es klappen. Grob:

PHP:
<?php

$host = 'example.com';
$file = '/path/on/the/server/index.php'; // http://example.com/path/.../index.php
$user = 'hans';
$pass = 'test123';

$fp = fsockopen($host, 80, $errno, $errstr, 30);
if (!$fp) {
    echo "$errstr ($errno)<br />\n";
} else {
    $out = "GET $file HTTP/1.1\r\n";
    $out .= "Host: $host\r\n";
    $out .= "Authorization: Basic " . base64_encode($user . ':' . $pass);
    $out .= "Connection: Close\r\n\r\n";
    fwrite($fp, $out);
    while (!feof($fp)) {
        echo fgets($fp, 128);
    }
    fclose($fp);
}
 
Ich habe das schon versucht:
PHP:
Warning:  fsockopen() [function.fsockopen]:  unable to connect to http://example.org/members:80 (Unable to find  the socket transport "http" - did you forget to enable it when you  configured PHP?) in C:\xampp\htdocs\Script\index.php on line 28
Unable to find the socket transport "http" - did you forget to enable it when you configured PHP? (84552008)
Am einfachsten wäre es, dass der PHP Script sich nicht als neuer Client mit anderem UserAgent ausgibt, sondern das vom Browser übernimmt, der schon eingeloggt ist.

Ich habe es mit fopen, fsockopen versucht, aber entweder funktioniert's nicht, weil es irgendwie irgendwo nicht erlaubt ist oder ich nicht authentifiert bin.

Also muss ich mich per PHP irgendwie neu einloggen oder die Verbindung (User Agent, etc.) vom Browser übernehmen.

Edit:

Wenn ich nur die Seite zum Einloggen include, kommt:
PHP:
Warning:  include(http://exmaple.org/members) [function.include]: failed to open stream: HTTP request failed! HTTP/1.1 401 Authorization Required  in C:\xampp\htdocs\Script\index.php on line 42

Wenn ich die Datei, die ich sehen will, einfach include, kommt 404 - Not found.
Das passiert auch im Browser, wenn ich mich zuvor nicht eingeloggt habe.
 
Funktioniert immer noch nicht.

Ich denke, dass der Ansatz richtig ist, allerdings ist der $host, wo ich mich anmelden soll ein ganz anderer, als wo die Datei liegt.

PHP:
$host = "example.org/members"; // Hier kommt das htacces Fenster zum Einloggen, wenn man es nicht schon ist.
$file = "eineGanzAndereDomain_woIchNurZugriffAufDieDateiHabe,WennIchMichAuf$hosteinlogge";
Ich versuche den Script irgendwie zu formen und werde per 302 wieder zur Anmeldeseite weitergeleitet:

HTML:
HTTP/1.1 302 Found Date: Sat, 28 Aug 2010 12:55:00 GMT Server: Apache Location: http://www.example.org/members/ Transfer-Encoding: chunked Content-Type: text/html; charset=iso-8859-1  11b     Found

 The document has moved here.(Link zur Anmeldeseite)
 
Zurück
Oben