ich hab ein Problem mit meinem loginscript und zwar ich log mich ein, starte die session. dann bin ich auf meiner geschützten seite, lassen mir die session und die sid ausgebe.
->1.Problem: die sid wird nur ausgegeben wenn der cookie noch nicht existiert sonst wird 'array' ausgegeben. wieso?
2.Prob: wenn ich jetz auf einen link zu einer anderen Seite klicke (oder zur gleichen) werde ich zurück gesetzt zu meinm loginformular.
ich hab mich jetz den ganzen tag mit dem problem beschäfftigt und habe auf im forum einge beiträge gefunden wo das selbe problem beschrieben war, abeer ich bin nicht draus schlau geworden.
meine geschütze seite wo ich auth.php(siehe oben)einbinde
->1.Problem: die sid wird nur ausgegeben wenn der cookie noch nicht existiert sonst wird 'array' ausgegeben. wieso?
2.Prob: wenn ich jetz auf einen link zu einer anderen Seite klicke (oder zur gleichen) werde ich zurück gesetzt zu meinm loginformular.
ich hab mich jetz den ganzen tag mit dem problem beschäfftigt und habe auf im forum einge beiträge gefunden wo das selbe problem beschrieben war, abeer ich bin nicht draus schlau geworden.
PHP-Code:
<?php
class auth
{
private $hashkey;
private $redirect;
public function __construct($hashkey, $redirect)
{
$this->hashkey = $hashkey;
$this->redirect = $redirect;
$this->sess();
}
private function sess()
{
//preft ob schon eine session vorhanden ist
if (isset($_SESSION['login_hash'])) {
$this->confirmauth();
} else {
$this->login();
}
}
private function login()
{
//POST variablen prüfen
if (empty($_POST['nick']) || empty($_POST['pw'])) {
$this->redirected('leer');
}
if (!isset($_POST['nick']) || !isset($_POST['pw'])) {
$this->redirected('Notset');
}
//variablen fuer die Datenbank abfrage maskieren
$nick= mysql_escape_string($_POST['nick']);
$pw = md5($_POST['pw']);
$pw = mysql_escape_string($pw);
//DB Daten includen
include ('connect.php');
//DB Abfrage ob nuer ein user mit dieser pw/nick kombination vorhanden ist
$sql = "SELECT * FROM benutzer
WHERE nick = '$nick' AND
pw = '$pw'";
$result = mysql_query($sql);
$zeilen = mysql_num_rows($result);
//zuruecksetzen falls nicht exakt ein Eintrag vorhanden ist
if ($zeilen != 1) {
$this->redirected('DBProb');
}
//sonst session setzen
else {
$this->storeauth($nick, $pw);
}
}
//setzt session variablen
public function storeauth($nick, $pw)
{
session_start();
$_SESSION['loggedin'] = true;
$_SESSION['nick'] = $nick;
$_SESSION['pw'] = $pw;
$hashkey = md5($this->hashkey . $nick . $password);
$_SESSION['login_hash'] = $hashkey;
}
//ueberprueft einen besteheden login
private function confirmauth() {
$nick = $this->get('nick');
$pw = $this->get('pw');
$hashkey = $this->get('login_hash');
if (md5($this->hashkey . $nick . $password) != $hashkey) {
$this->logout();
}
}
private function get($name) {
if (isset($_SESSION[$name])) {
return $_SESSION[$name];
} else {
return false;
}
}
public function logout() {
unset($_SESSION['pw']);
unset($_SESSION['login_hash']);
unset($_SESSION['nick']);
$_SESSION['loggedin'] = false;
$this->redirected();
}
private function redirected($fehler)
{
if ($fehler) {
header('Location:' . $this->redirect . '?fehler=' . $fehler);
} else {
header('Location:' . $this->redirect);
}
exit ();
}
}
?>
Code:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <html> <head> <title>News </title> <meta http-equiv="content-type" content="text/html; charset=iso-8859-1"> </head> <link rel="stylesheet" type="text/css" href="../schule/style.css"> <body> <?php //log einbinden require_once 'auth.php'; //log instanziieren $auth = new auth('secret', 'login2.php'); echo SID; echo '<pre>'; print_r($_SESSION); echo '</pre>'; ?> <table border="0" cellspacing="0" cellpadding="0"> <tr> <td background="../schule/spacer.png" width="100"></td> <td height="30" background="../schule/news_tst.png" width="200"><div align="center"><?php echo 'News'?></div></td> <td height="30" background="../schule/oben_pers_daten.png" width="200"><div align="center">Pers. Daten</div></td> <td background="../schule/spacer.png" width="100">Logout</td> </tr> <tr> <td colspan="4" width="400"></td> </tr> </table> </body> </html>
Kommentar