Cookie Problem

Protection

Grünschnabel
Hallo!

Ich habe mehr oder weniger ein komisches Problem mit den Cookies auf meiner Seite.

Um in den Admin-Bereich zu kommen, folgt beim Aufruf erstmal ein Forumlar, mit denen Benutzer und Passwort geprüft werden, die geschieht mit:
PHP:
<?

if(!isset($_COOKIE["user_eingeloggt"])) {

?>
Trage hier deine Logindaten ein, um in den Admin-Bereich zu gelangen.
<form action="checkuser.php" method="post">
<input type="text" value="Benutzer" onFocus="javascript:this.value=''" name="form_user" size="9">&nbsp;&nbsp;&nbsp;<input type="password" value="Passwort" onFocus="javascript:this.value=''" name="form_pw" size="9">
<input type=submit value="anmelden">

So, wenn der Benutzer auf anmelden klickt, leitet das Forumlar die Daten an checkuser.php weiter, diese sieht wie folgt aus:

PHP:
<?php
session_start();
require("config.php");
$result = mysql_query("SELECT * FROM $team_table WHERE nick = '$form_user' ");
$user = mysql_fetch_array($result);
$form_pw = md5($form_pw);

if ($user[pw] == $form_pw) {

  $myid = $user[id];

  // Ein Datensatz wurde gefunden.
  $datenrichtig = true;

  // Variable $user_eingeloggt erstellen.
  $user_eingeloggt = true; 

} else {
  // Die Benutzerdaten waren falsch.
  $datenrichtig = false;
  
  // Variable $user_eingeloggt erstellen.
  $user_eingeloggt = false;

}

// Variable $user_eingeloggt in der Session registrieren.
session_register("user_eingeloggt");
session_register("myid");
?>

<html>
<head>
<?php
if ($datenrichtig) {

 ?>
  <meta http-equiv="Refresh" content="1; url=cookie.php?<?=session_name()?>=<?=session_id()?>">
<?php
}
?>
</head>

<body>
<?php

if ($datenrichtig) {  
  echo "Danke, du hast dich erfolgreich angemeldet. Du wirst nun weitergeleitet!";
} else {
  echo "Die eingetragenen Daten waren nicht korrekt.";
}

?>
</body>
</html>

so..die cookie.php sorgt dann für das setzen des cookies...das script sieht wie folgt aus:

PHP:
<?
session_start();
$time = time()+(60*10);
session_save_path("./save"); 
SetCookie("user_eingeloggt", "true",  $time, "/");
SetCookie("myid", $_SESSION['myid'],  $time, "/");
echo "Cookie gespeichert!<p>";
?>

<a href="index.php?site=admin">Klick hier um zur Hauptseite zu gelangen!</a>

So, das funktioniert alles wunderbar! Alle Admins können sich bei mir erfolgreich einloggen und ohne Probleme ihre Admin-Rechte nutzen...bis auf einer!
Dieser hat Norton Internet Security installiert, und da gibt es dann immer eine Meldung von wegen REFERER, und der Cookie wird wieder gelöscht...selbst wenn Norton Internet Security deaktiviert ist, wird mein Cookie nicht angenommen...da dieser Benutzer aber einer der Hauptadmins ist, kann ich auf ihn nicht verzichten. Ich finde aber leider keine Lösung, damit er auch auf den Admin-Bereich zugreifen kann. Wie kann ich dafür sorgen, dass auch er sich einloggen kann?

Er kommt bis zu der Meldung, dass seine eingegebenen Daten korrekt waren, allerdings gelangt er dann auf die Startseite, statt in den Admin-Bereich..da ja kein entsprechende Cookie vorhanden ist. Ich hoffe jemand weiß Rat oder kennt die Lösung!

Danke ! :)
 
Hallo!

Also, mal eine Frage:
Wenn du die Daten, ob der User eingeloggt ist sowieso in einer Session speicherst, warum - frag' ich mich, warum setzt du dann denn noch ein Cookie?!
Die erste Abfrage, bevor das Login-Formular kommt könnte man ja auch ohne Probleme so gestalten:

PHP:
if(!isset($_SESSION["user_eingeloggt"])) {}

Da braucht man doch nicht extra ein Cookie setzten, wenn doch sowieso eine Session gestartet wird.
Und, noch eins:
Warum übergibst du die Session-ID manuel einem Cookie?!
Das macht PHP doch wenn schon von selbst.
 
das liegt einfach daran, dass ich noch nicht ganz soooo fit in PHP bin..zumindest was teilweise die anwendung betrifft.

ich habe nun in die admin php, folgenden code gesetzt:

PHP:
<?

if(!isset($_SESSION["user_eingeloggt"])) {

?>
Trage hier deine Logindaten ein, um in den Admin-Bereich zu gelangen.
<form action="checkuser.php" method="post">
<input type="text" value="Benutzer" onFocus="javascript:this.value=''" name="form_user" size="9">&nbsp;&nbsp;&nbsp;<input type="password" value="Passwort" onFocus="javascript:this.value=''" name="form_pw" size="9">
<input type=submit value="anmelden"></form>
...

danach folgt halt der code für den adminbereich.

was muss ich denn noch ändern, damit sich alles einfacher gestalten lässt? bzw. ein login möglich ist?

das weiteren setze ich aus folgenden gründen einen cookie:

mal angenommen ich ändere die admin.php wie oben beschrieben, und die checkuser.php sieht dann so aus:

PHP:
<?php
session_start();
require("config.php");
$result = mysql_query("SELECT * FROM $team_table WHERE nick = '$form_user' ");
$user = mysql_fetch_array($result);
$form_pw = md5($form_pw);

if ($user[pw] == $form_pw) {

  $myid = $user[id];

  // Ein Datensatz wurde gefunden.
  $datenrichtig = true;

  // Variable $user_eingeloggt erstellen.
  $user_eingeloggt = true; 

} else {
  // Die Benutzerdaten waren falsch.
  $datenrichtig = false;
  
  // Variable $user_eingeloggt erstellen.
  $user_eingeloggt = false;

}

// Variable $user_eingeloggt in der Session registrieren.
session_register("user_eingeloggt");
session_register("myid");
?>

<html>
<head>
<?php
if ($datenrichtig) {

 ?>
  <meta http-equiv="Refresh" content="1; url=admin.php?<?=session_name()?>=<?=session_id()?>">
<?php
}
?>
</head>

<body>
<?php

if ($datenrichtig) {  
  echo "Danke, du hast dich erfolgreich angemeldet. Du wirst nun weitergeleitet!";
} else {
  echo "Die eingetragenen Daten waren nicht korrekt.";
}

?>
</body>
</html>

Das Problem ist dann, dass ich wieder nach der Weiterleitung zum Login-Formular zurückgelange. :(
 
Zuletzt bearbeitet:
Naja, ich für meinen Fall hätte das auch eher auf folgende Weise gelöst:

checkuser.php:

PHP:
<?php
	if (isset ($_POST['form_user']) AND
                         $_POST['form_user'] != "" AND
                         isset($_POST['form_pw') AND
                         $_POST['form_pw'] != "") {
		session_start();
		
		require("config.php");
		
		mysql_connect(HOST, USERNAME, PASSWORD);
		mysql_select_db(DATABASE);
		$result = mysql_query("SELECT * FROM $team_table WHERE nick = '".$_POST['form_user']."' ");
		$user = mysql_fetch_assoc($result);
		$form_pw = md5($form_pw);
  
		if ($user['pw'] == $_POST['form_pw']) {
			$_SESSION["MyID"] = $user['id'];
			$_SESSION['ID'] = session_id();
			
			header("Location: Admin.php?".session_name()."=".session_id());
		else {
			echo "Die eingetragenen Daten waren nicht korrekt.";
		}

	else {
		echo "<html><body>Trage hier deine Logindaten ein, um in den Admin-Bereich zu gelangen."
			."<form action=\"$PHP_SELF\" method=\"post\"><input type=\"text\" value=\"Benutzer\" "
			."onFocus=\"javascript:this.value=''\" name=\"form_user\" size=\"9\">&nbsp;&nbsp;&nbsp;"
			."<input type=\"password\" onFocus=\"javascript:this.value=''\" name=\"form_pw\" size=\"9\">"
			."<input type=\"submit\" value=\"anmelden\"></form></body></html>";
	}
?>

config.php:

PHP:
<?php
	define("HOST", "localhost");
	define("USERNAME", "654321");
	define("PASSWORD", "123456");
	define("DATABASE", "datenbank_1");
?>

admin.php

PHP:
<?php
	session_start();

	if (isset($_SESSION['ID']) AND
		$_SESSION['ID'] == session_id() AND
		isset($_SESSION['MyID']) AND
		$_SESSION['MyID'] != "") {
		
		echo "Wilkommen im Admin-Bereich!";
	}
	else {
		header("Location: CheckUser.php");
	}
?>
 
Zuletzt bearbeitet:
soooo..hab jetzt mal deine scripts so eingebaut!

allerdings klappt es hier und da nicht so ganz..ein paar fehler konnte ich schon korrigieren..

Die admin.php quält mich mit folgender Fehlermeldung:

Code:
Parse error: parse error, unexpected T_IS_NOT_EQUAL in /www/htdocs/v035903/neu/code/admin.php on line 14

Quellcode:

PHP:
<?php 
session_start(); 

if (isset($_SESSION['ID']) AND 
$_SESSION['ID'] == session_id() AND 
isset($_SESSION['MyID']) AND 
$_SESSION['MyID']) != "") { 

echo "Wilkommen im Admin-Bereich!"; 
} 
else { 
header("Location: CheckUser.php"); 
} 
?>

des weiteren behauptet checkuser.php immer, das meine eingegeben daten nicht korrekt waren :(

Woran liegt's?

Danke für deine bisherige Hilfe!
 
Zuletzt bearbeitet:
Ich kann dir sagen, woran es lag:
Ich dachte nicht, dass du das Script einfach so komplett übernimmst.
Deshalb hab' ich nicht mal im Ansatz auf Richtigkeit geachtet.
Musste halt 'n bisschen schnell gehen. Normalerweise teste ich alles, was ich hier rein stelle, immer vohrer. Das hab' ich aber diesmal nicht getan.
Aber nun hab' ich das nachgeholt!
Und es klappt!
Da waren nur ein paar Fehler in der If-Abfrage ('ne Klammer zu viel in Admin.php):

$_SESSION['MyID']) != "")

siehst du es?
Hinger ['MyID'] also )

Und im checkuser.php fehlte eine geschweifte Klammer vor dem else.
Außerdem hab' ich jetzt auch die Dateinamen so geschrieben, dass es passen müsste, die Überprüfung des Passwortes richtig gestellt und auch noch 'n mysql_close() hinzugefügt (dem hab' ich vorher keine Beachtung geschenkt).

Unten sind dann die richtigen Scripts gepostet.

Übrigens, es wäre doch auch sehr einfach möglich, das Passwort gleich in der MySQL-Query zu testen.
Dann müsstest du nur überprüfen, ob bei der Query ein Ergebnis gefunden wurde, oder nicht, und bräuchtest das Passwort nicht extra testen.
Aber ich hab' das jetzt erstmal nicht mit eingebaut, sondern poste hier nur mal 'ne Beispiel-Query:

SELECT ID FROM $team_table WHERE nick = $_POST['form_user'], pw = md5($_POST['form_pw']


checkuser.php:

PHP:
<?php 
if (isset ($_POST['form_user']) AND 
$_POST['form_user'] != "" AND 
isset($_POST['form_pw']) AND 
$_POST['form_pw'] != "") { 
session_start(); 

require("config.php"); 

mysql_connect(HOST, USERNAME, PASSWORD); 
mysql_select_db(DATABASE); 
$result = mysql_query("SELECT * FROM $team_table WHERE nick = '".$_POST['form_user']."' "); 
$user = mysql_fetch_assoc($result);
mysql_close();

if ($user['pw'] == md5($_POST['form_pw'])) 
{ 
$_SESSION["MyID"] = $user['id']; 
$_SESSION['ID'] = session_id(); 

header("Location: admin.php?".session_name()."=".session_id());  
} else { 
echo "Die eingetragenen Daten waren nicht korrekt."; 
}
}
else { 
echo "<html><body>Trage hier deine Logindaten ein, um in den Admin-Bereich zu gelangen." 
."<form action=\"$PHP_SELF\" method=\"post\"><input type=\"text\" value=\"Benutzer\" " 
."onFocus=\"javascript:this.value=''\" name=\"form_user\" size=\"9\">&nbsp;&nbsp;&nbsp;" 
."<input type=\"password\" onFocus=\"javascript:this.value=''\" name=\"form_pw\" size=\"9\">" 
."<input type=\"submit\" value=\"anmelden\"></form></body></html>"; 
} 
?>


admin.php:


PHP:
<?php 
session_start(); 

if (isset($_SESSION['ID']) AND 
$_SESSION['ID'] == session_id() AND 
isset($_SESSION['MyID']) AND 
$_SESSION['MyID'] != "") { 

echo "Wilkommen im Admin-Bereich!"; 
} 
else { 
header("Location: checkuser.php"); 
} 
?>
 
super, danke für die schnelle hilfe!

aber ich hab es mir fast gedacht...nun schneidet sich irgendwas mit dem darauf folgenden code in der admin.php.. :(

ich verzweifel noch :(

kann man dich irgendwie per ICQ/AIM erreichen, das geht dann etwas schneller.. :)
 
Zurück