PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : login funktioniert nicht


db_user
21.12.2003, 03:56:24
Ich möchte, dass Html-Dateien nur aufgerufen werden, wenn der user eingeloggt ist. Hab nach einem Tutorial (von Mr. Happiness) die Scripte gecodet und der Eintrag der user klappt bestens. Beim Aufruf der zu schützenden Seiten möchte ich, dass nicht eingeloggte user wieder auf die login-seite verwiesen werden, aber genau das klappt nicht. Die Seiten können aufgerufen werden trotz session. In den Html-Seiten steht folgendes an 1. Stelle:

php session_start();
if(logged_in()){
include 'sessionhelpers.inc.php';}
else {
die('Sie sind nicht eingeloggt.');
include 'http://www.xxx.com/login.php';
}

Ich size jetzt seit 2 Tagen fast ununterbrochen vor der Kiste und krieg noch nen Schreikrampf. Das kann doch nur noch ne Kleinigkeit sein, oder?
Thx im voraus

meikel (†)
21.12.2003, 06:35:43
Original geschrieben von db_user
Die Seiten können aufgerufen werden trotz session. In den Html-Seiten steht folgendes an 1. Stelle:
1. Werden auf Deiner Kiste HTML Seiten mit PHP geparst?
2. Wie übergibst Du die PHP-Session Variable an die Folgeseiten?
3. Was treibt Dein logged_in() eigentlich?

db_user
21.12.2003, 07:13:13
Zur Zeit blick ich nix mehr, wieso html mit php geparst?
Bin Anfänger und weis nicht mehr weiter. Bin für jede Hilfe dankbar.


function login($userid)
{
$sql="UPDATE users
SET UserSession='".session_id()."'
WHERE userId=".$userid;
mysql_query($sql);
}

Progman
21.12.2003, 08:43:32
Für ein Login-System sollteste vielleicht PEAR::Auth (http://pear.php.net/Auth) verwenden. Siehe auch: Ein Loginsystem von tut.php-q.net (http://tut.php-q.net/pear-div.html#u2).

meikel (†)
21.12.2003, 09:17:58
Original geschrieben von db_user
[B]Zur Zeit blick ich nix mehr, wieso html mit php geparst?
Du hattest geschrieben, daß Du in Deine *HTML* Seiten oben PHP Quelltext reinschreibst ("In den Html-Seiten steht folgendes an 1. Stelle"). Das ist dem Apachen im Prinzip völlig schnuppe, weil er bei der *üblichen* Konfiguration nur solche Files an PHP weiterreicht, die die Fileextension .php haben.

Im Weiteren frage ich mich bei "if(logged_in()){ ", woher PHP die Funktion logged_in() kennt, denn um die Funktion, die nicht zu den Standard PHP Funktionen gehört, zu kennen, muß vorher das PHP-File, in dem die Funktion deklariert wurde, per include oder require eingefügt werden. Eigentlich meckert PHP bei solchen Fehlern ganz böse, aber man kann PHP auch so verkonfigurieren, daß es alles schluckt.

Bin Anfänger und weis nicht mehr weiter. Bin für jede Hilfe dankbar.Das wird schwer werden, weil ich kein Hellseher bin. Das, was Du bisher aus Deinen Quelltexten zitiert hattest, ist zuwenig.

function login($userid)
{
$sql="UPDATE users
SET UserSession='".session_id()."'
WHERE userId=".$userid;
mysql_query($sql);
}
Wenn Du hier keine "automatische Verfallszeit" für die Session mit einbaust, bleibt der User so lange eingelogt, bis der Rechner kaputtgeht.

meikel (†)
21.12.2003, 09:27:01
Original geschrieben von Progman
Siehe auch: Ein Loginsystem von tut.php-q.net (http://tut.php-q.net/pear-div.html#u2).
Nicht schlecht, Herr Progman! Nur das Logout solltest Du noch korrigieren:

# angemeldet und möglichst vor dem HTML content
if (isset($_REQUEST['action'] ) AND $_REQUEST['action'] == 'logout')
{
session_destroy(); # <---
$url = 'http://'.$_SERVER['SERVER_NAME'].$_SERVER['SCRIPT_NAME'];
if (!headers_sent())
{
header ("Location: $url");
exit;
}
printf('<a href="%s">KLICK!</a>', $url);
}
Je nach Konfiguration funktioniert Auth nämlich auch mit Keksen.

db_user
21.12.2003, 10:52:22
egal, was ich in die html-seiten reinschreibe, er zeigt sie an, wie kann ich die "normale" Konfiguration dementsprechend ändern?

siehe:

"Du hattest geschrieben, daß Du in Deine *HTML* Seiten oben PHP Quelltext reinschreibst ("In den Html-Seiten steht folgendes an 1. Stelle"). Das ist dem Apachen im Prinzip völlig schnuppe, weil er bei der *üblichen* Konfiguration nur solche Files an PHP weiterreicht, die die Fileextension .php haben."

db_user
21.12.2003, 11:01:01
Hier mal die php-files



login.php
<?
session_start();
include 'sessionhelpers.inc.php';
if (isset($HTTP_POST_VARS['login']))
{
$userid=check_user($HTTP_POST_VARS['identnr'], $HTTP_POST_VARS['pwd']);
if ($userid!=false)
login($userid);
else
echo 'Ihre Anmeldedaten waren nicht korrekt!';
}
if (!logged_in())
echo '<form method="post" action="login.php">
<label>ID-Nummer.:</label><input name="identnr" type="text"><br>
<label>Passwort: </label><input name="pwd" type="password" id="pwd"><br>
<input name="login" type="submit" id="login" value="Einloggen">
</form>';
else
echo '<a href="logout.php">Ausloggen</a>';
echo '<p /><a href="inhalt/index.html">start</a>';
?>


logout.php
<?
session_start();
include 'sessionhelpers.inc.php';
echo 'Sie sind ';
if (!logged_in())
echo 'nicht ';
echo 'eingeloggt.<p />';
logout();
echo 'Sie sind ';
if (!logged_in())
echo 'nicht ';
echo 'eingeloggt.< p/>';
echo '<a href="login.php">Einloggen</a>';
?>



sessionhelper.inc.php
<?
function connect()
{
$con= mysql_connect('xxx','xxx','poppen69') or die(mysql_error());
mysql_select_db('xxx',$con) or die(mysql_error());
}

function check_user($identnr, $pwd)
{
$sql="SELECT UserId
FROM users
WHERE identnr='".$identnr."' AND pwd=MD5('".$pwd."')
LIMIT 1";
$result= mysql_query($sql) or die(mysql_error());
if ( mysql_num_rows($result)==1)
{
$user=mysql_fetch_assoc($result);
return $user['UserId'];
}
else
return false;
}

function login($userid)
{
$sql="UPDATE users
SET UserSession='".session_id()."'
WHERE userId=".$userid;
mysql_query($sql);
}

function logged_in()
{
$sql="SELECT UserId
FROM users
WHERE UserSession='".session_id()."'
LIMIT 1";
$result= mysql_query($sql);
return ( mysql_num_rows($result)==1);
}

function logout()
{
$sql="UPDATE users
SET UserSession=NULL
WHERE UserSession='".session_id()."'";
mysql_query($sql);
}

connect();
?>

meikel (†)
21.12.2003, 11:34:24
Original geschrieben von db_user
egal, was ich in die html-seiten reinschreibe, er zeigt sie an, wie kann ich die "normale" Konfiguration dementsprechend ändern?Einfach mal das Handbuch lesen:
http://www.dclp-faq.de/q/q-apache-parsen.html

db_user
21.12.2003, 11:37:00
Hab den grundsätzlichen Fehler, habe webspace bei 1und1, die php-Konfiguration lässt sich nicht ändern, sodass die "Sicherheits-Scripte"nicht aufgerufen werden. Werde jetzt die html-seiten auf php umschreiben.

Welchen Provider würdet Ihr empfehlen? In der Ausbaustufe soll das ganze mal ein CMS-System werden, in dem registrierte user Dateien und kleine Videos downloaden können, Infos abrufen und kleine personalisierte Homepages erstellen können.Der Anbieter sollte kein kleiner sein.

thx

meikel (†)
21.12.2003, 11:50:30
Original geschrieben von db_user
Hier mal die php-files
Fein, da wurde einiges klarer.
1. obiges Script kann nicht funktionieren:
session_start();
if(logged_in()){
Die Funktion wird nicht gefunden, da das File, in dem die drin steckt, zu dem Zeitpunkt noch nicht eingefügt wurde.

die('Sie sind nicht eingeloggt.');
include 'http://www.xxx.com/login.php';
Das ist Unfug. Mit die() ist das Script gestorben und führt das nachfolgende include nicht mehr aus.

[ Script ]

Bei dem Script bin ich im Zweifel. Die Programmstruktur ist zwar nicht falsch aber veraltet. $HTTP_*_VARS waren bis PHP 4.0.6 aktuell.

Hier steht mehr: http://www.dclp-faq.de/q/q-php-variablen.html

meikel (†)
21.12.2003, 12:01:10
Original geschrieben von db_user
[B]Hab den grundsätzlichen Fehler, habe webspace bei 1und1, die php-Konfiguration lässt sich nicht ändern, sodass die "Sicherheits-Scripte"nicht aufgerufen werden. Werde jetzt die html-seiten auf php umschreiben.
Da Du, wie Du unten schreibst, ein CMS planst, wäre das genau der Punkt, mal über Templates nachzudenken. So kannst Du Programm von Inhalt und Layout trennen. Wenn Du zusätzlich noch eine Authentifizierung benötigst, könntest Du Dir viel Arbeit sparen, wenn Du Dich mit PEAR und etwas OOP beschäftgst.
Welchen Provider würdet Ihr empfehlen? [...] Der Anbieter sollte kein kleiner sein.
Da solltest Du dort mal suchen: http://www.webhostlist.de

In Deinem Falle wäre es günstiger, wenn Du auf eine aktuelle PHP Version achtest. Da bei mod_php der safe_mode zwingend ist (sonst kann sich jeder Nachbar Deine Files mit Linuxsystembefehlen anzeigen lassen), aber auf vielen Systemen mit safe_mode so schrecklich funktioniert, daß das Verändern von Dateien, die mit FTP hochgeladen wurden, fast unmöglich wird, hättest Du mit PHP als CGI Version wahrscheinlich wesentlich weniger graue Haare als Dir der safe_mode bereitet.