Mit PHP einen .htaccess-User identifizieren
    
Dr. Lecter
    
    
      
    
  - php
 nicht angemeldet
 nicht angemeldetHi :)
Ich habe eine mit .htaccess geschützte Seite. Besteht irgend eine Möglichkeit, PHP erkennen zu lassen, welcher Benutzer die geschützte Seite betritt?
Nach etwas SelfHTML-Studium wäre mein Lösungsansatz, in der .htacces-Datei zu bestimmen, dass je nach User auf eine andere URL umgeleitet wird, ich würde also zum Beispiel von "page.php3" auf "page.php3?user=DrLecter" umgeleitet. Problem: ich habe eigentlich keinen richtigen .htaccess-Zugang, sondern der Server ist so eingerichtet, dass Ordner, deren Name mit protected beginnt, automatisch geschützt sind (pws werden dann aus einer Datei mit einem vordefinierten Namen ausgelesen); meine Lösung ist also nicht umsetzbar.
Ist wohl nicht möglich, oder?
Gruss Dr. Lecter
P.S: Hmm... habe das schon mal gepostet, aber trotz Refresh wird nix angezeigt... nicht flamen, wenn er doch schon da ist, ja? :)
Guten Morgen,
lass Dir mal mit einem PHP-Script die Systemvariablen anzeigen:
$PHP_AUTH_USER
$PHP_AUTH_PW
usw.
Wäre doch denkbar, dass das System so sauber eingerichtet ist, dass die Werte darin landen, oder?
Grüße
Tom
Hallo!
lass Dir mal mit einem PHP-Script die Systemvariablen anzeigen:
$PHP_AUTH_USER
$PHP_AUTH_PW
usw.
Wäre doch denkbar, dass das System so sauber eingerichtet ist, dass die Werte darin landen, oder?
Zum einen hat das nicht mit "sauber eingerichtet" zu tun, sondern mit CGI oder Modul-Version, außerdem wäre sauber für mich
$_SERVER["PHP_AUTH_USER"]
$_SERVER["PHP_AUTH_PW"]
Aber wie gesagt geht das nicht in der CGI-Version, siehe http://www.php.net/manual/de/features.http-auth.php
Außerdem handelt es sich hier um die PHP eigene Authentifizierung und nicht .htaccess, hierbei steht der Username in $_SERVER["REMOTE_USER"], das Passwort kann man nicht bekommen!
Grüße
Andreas
PS: letzteres sollte auch in der CGI-Version funktionieren!
Hi Andreas,
nur mal ne frage ...
$_SERVER["REMOTE_USER"]
was spricht gegen $HTTP_SERVER_VARS["REMOTE_USER"] ?,
$_SERVER steht erst ab 4.1 zur Verfügung, $HTTP_SERVER_VARS so viel ich weiss schon in PHP3.
Das ist nicht als Kritik gemeint, sondern das juckt schon länger wenn ich jemanden $_SERVER benutzen sehe ;)
Mir fiel nur gerade eine Passage aus SELFHTML ein,
die lautete irgendwie "wenn 2 Tags das selbe tun, benutze stets das älter" oder so ähnlich, daher musste ich jetzt mal nachhaken.
gruss
Thorsten
Hi!
$_SERVER["REMOTE_USER"]
was spricht gegen $HTTP_SERVER_VARS["REMOTE_USER"] ?,
$_SERVER steht erst ab 4.1 zur Verfügung, $HTTP_SERVER_VARS so viel ich weiss schon in PHP3.
Da hast Du Recht, aber nur wenn man $_SERVER... noch nicht verwenden kann. Wenn doch sollte man das auch tun, denn $_SERVER wird früher oder später $HTTP_SERVER_VARS komplett ablösen, dann gehen Scripte mit $HTTP_SERVER_VARS nicht mehr, in PHP5 ist das schon im Gespräch!
Das ist nicht als Kritik gemeint, sondern das juckt schon länger wenn ich jemanden $_SERVER benutzen sehe ;)
Mir fiel nur gerade eine Passage aus SELFHTML ein,
die lautete irgendwie "wenn 2 Tags das selbe tun, benutze stets das älter" oder so ähnlich, daher musste ich jetzt mal nachhaken.
Das ist aber kein guter Leitsatz! Sicher, manchmal ist das vernünftig, daher muß man das auch im Zusammenhang sehen und nicht verallgemeinern!
Wenn Du Dich immer daran hälst gibt es bei Dir keinen Fortschritt!
Grüße
Andreas
Hi Andreas
Da hast Du Recht, aber nur wenn man $_SERVER... noch nicht verwenden kann. Wenn doch sollte man das auch tun, denn $_SERVER wird früher oder später $HTTP_SERVER_VARS komplett ablösen, dann gehen Scripte mit $HTTP_SERVER_VARS nicht mehr, in PHP5 ist das schon im Gespräch!
hm, das wäre etwas ungeschickt, da bisher alle meine Scripte mit $HTTP_SERVER_VARS laufen ;)
wobei ich mir vorstellen kann, das dies für die Praxis ein schon recht drastischer Schritt sein dürfte, da man in Kauf nehmen würde, dass "viele" Skripte dann nicht mehr laufen.
Ich denke, man wird das auf die ein oder andere "Weise weiterschleifen".
Wenn Du Dich immer daran hälst gibt es bei Dir keinen Fortschritt!
dann vielleicht etwas wie
if (!isset($_SERVER) AND isset($HTTP_SERVER_VARS)) {
  $_SERVER = array();
  while (list($name,$value) = each($HTTP_SERVER_VARS)) {
    $_SERVER[$name] = $value;
    }
  }
zu beginn des Skriptes und alle sind glücklich :)
Gruss
Thorsten
Hallo,
dann vielleicht etwas wie
if (!isset($_SERVER) AND isset($HTTP_SERVER_VARS)) {
$_SERVER = array();
while (list($name,$value) = each($HTTP_SERVER_VARS)) {
$_SERVER[$name] = $value;
}
}
zu beginn des Skriptes und alle sind glücklich :)
Wieso so umständlich?
if (!isset($_SERVER) && isset ($HTTP_SERVER_VARS)) {
  $_SERVER = $HTTP_SERVER_VARS;
}
aber Achtung: $_SERVER ist Superglobal, $HTTP_SERVER_VARS nicht.
Grüße,
Christian
"wenn 2 Tags das selbe tun, benutze stets das älter"
$HTTP_SERVER_VARS und $_SERVER tun allerdings nicht dasselbe, denn $_SERVER ist ein superglobal, $HTTP_SERVER_VARS nicht, alle $HTTP_*_VARS sind daher deprecated.
Anmerkung: $_REQUEST hat kein $HTTP_*_VARS Pendant.
"wenn 2 Tags das selbe tun, benutze stets das älter"
$HTTP_SERVER_VARS und $_SERVER tun allerdings nicht dasselbe, denn $_SERVER ist ein superglobal, $HTTP_SERVER_VARS nicht, alle $HTTP_*_VARS sind daher deprecated.
und was heißt das?
Anmerkung: $_REQUEST hat kein $HTTP_*_VARS Pendant.
Grüße
Andreas
und was heißt das?
Antwort #1:
http://www.php.net/manual/en/language.variables.predefined.php
http://www.php.net/manual/en/reserved.variables.php
Antwort #2:
$_* sind superglobals, sie sind in jedem scope automatisch global, was ungemein praktisch und straightforward ist.
$HTTP_*_VARS müssen eventuell (in Funktionen etc.) mit dem keyword 'global' oder aus dem (seit PHP 3 existenten) superglobal $GLOBALS in den aktuellen scope geholt werden, was unschön und Nährboden für schwer auffindbare Fehler ist.