Login klappt nicht

jbo

Mitglied
Hi,
nach der Eingabe der richtigen Benutzerdaten lande ich wieder auf der login-seite. Ich seh den Fehler einfach nicht, hat jemand einen Tip?

php:


logintest
<?php
session_start();
include "db-connect.php";
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 logout()
{
$sql="UPDATE users
SET usersession=NULL
WHERE UserSession='".session_id()."'";
mysql_query($sql);
}
if (isset($_POST['login']))
{
$userid=check_user($_POST['identnr'], $_POST['pwd']);
if ($userid!=false) {
login($userid);
$_SESSION['loggedIn'] = $userid;
}
else {header("Location:login.php");};
}
if (!isset($_SESSION['loggedIn'])) {header("Location: login.php"); }
else {header("Location:inhalt/index.html");}
?>

login.php

<a href="anmelden.html">Hier können Sie sich neu registrieren</a>
<?
session_start();
include 'logintest.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 (!login())

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="Login">
</form>';
else
echo '<a href="logout.php"><img src=inhalt/Content/Buttons/Logout.gif border="0"></a>';
?>
 
Also: Anscheinend liefert der Aufruf von check_user einen true-Wert(also einen user) zurück, diesen Teil können wir aus dem debug herausnehmen, genauso wie die db-connect-include-Datei.

Frage:
Wieso speicherst du Session-IDs in der Datenbank...lass Sessions doch einfach Sessions sein und speicher eine Variable, die du dann der Session-Id zuweist auf, dem Server.
Wenn du der Session einen Wert zuweist, kannst du ganz ohne den Datenbankstreß den LogIn verifizieren, nun aber zurück zum login bug:

Hinter If-Else Schleifenbegrenzungsklammern { } hat ein Semikolon NICHTS zu suchen, wenn ich richtig informiert bin.

Ansonsten finde ich jetzt keine Sachen, von denen ich Gänsehaut o.Ä bekomme, tu einfach folgendes:
Mach in die If-Else Blöcke echos rein wie:
PHP:
if($userid)
{
echo "check user funktion gibt true zurück";
...}

Damit kannst du die Stelle ausfindig machen, an der das Script bockt.
Wenn du diese gefunden hast und den Fehler nicht korrigieren kannst, einfach hier posten :D
 
irgendwie mach ich es mir zu kompliziert, ich möchte einfach nur ne session aus pwd und identnr erzeugen und dann auf die anderen Seiten weitergeben.
 
langsam zweifel ich an meinem Verstand.
Das Login funktioniert, die HP ist mit frames aufgebaut, habe überall den session-aufruf drin und trotzdem kann ich die seiten normal aufrufen. Ich blick nicht, wie das überhaupt funktionieren kann.
 
Das ist denkbar einfach:
Eine Session an sich ist ein serverseitiges Cookie:
Eine Variable(oder ein Array, wenn du's geschickt verpackst) wird in einem Verzeichnis auf dem Server gespeichert und dieser Variable wird eine ID, eine sog. Session-id zugewiesen.

Wenn du es nun fertigbringst, diese ID dem User zuzuweisen, sprich url?s=$session_id
, kannst du damit diese Variable einem User zuweisen.

Eine einfachere Alternative sind Cookies, da diese dem Client FEST zugeordnet sind und somit nicht über den URL übergeben werden müssen und auch nach Schließen des Browsers lesbar sind.
Es gibt zwar Leute, die keine Cookies akzeptieren, das ist jedoch ein gaaaaaaanz geringer Anteil und das meist auch nur zu Debugzwecken.

Genauere Anleitung zu sessions:

http://www.selfphp.info/funktionsuebersicht/session_funktionen.php
 
irgendwie hab ich im Moment Matschbirne.
Das script soll nur Seiten aufrufen lassen, wenn der user eingeloggt ist. Es wird zwar eine sessionid aufgebau, aber im Grunde kann jeder die seiten aufrufen. Wo liegt hier blos der Fehler?

Damit sollte doch ausgeschlossen sein, dass die Seite aufgerufen werden kann.
PHP:
 <?
php session_start(); 
include 'sessionhelpers.inc.php'; 
if (!logged_in())
  die('Sie sind nicht eingeloggt.');
?>
 
Zuletzt bearbeitet:
PHP:
<?
php session_start(); 
include 'sessionhelpers.inc.php'; 
if (!logged_in())
  die('Sie sind nicht eingeloggt.');
?>
Huch! :eek: Was willst du denn damit verhindern? Das Anzeigen der sessionhelpers.inc? Das machst du so:
PHP:
<?
php session_start(); 
if(logged_in())
  include 'sessionhelpers.inc.php';
else
  die('Sie sind nicht eingeloggt.');
?>
Mach dich mal grundlegend über if/else-Anweisungen schlau.
 
man, schreib ich müll, ich will verhindern, dass die seiten nur von eingeloggten usern gesehen werden
 
Zuletzt bearbeitet:
das script ist nach dem tut von mr. hapiness aufgebaut. irgendwo muss der fehler sein, dass die seiten auch aufgerufen werden, wenn keiner eingeloggt ist, ich kann nur den fehler nicht finden
 
Erm sorry aber könntest du dich mal entscheiden was du eigentlich willst? Soll jetzt jeder die Seite betrachten können oder nur eingeloggte User?
 
Zurück