PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : cookies . . .


CyberAge
10.07.2002, 08:53:17
Hi Leutz!

Ich hab mal nen kleines Problem, und zwar möchte ich dem Login meiner Seite die Option hinzufügen, dass die Benutzerdaten im Cookie gespeichert bleiben, und beim betreten der Seite wieder ausgelesen werden. Jedoch wird weder das cookie geschrieben (hab alle meine cookies gelöscht und das script laufen lassen) und daher kann auch kein cookie ausgelesen werden. hier mal die scriptschnipsel:

einmal zum setzen des cookies:

.
.
.
if($merken[0] == 1)
{
setcookie("id", $HTTP_SESSION_VARS[id], time()+60*60*24*7);
setcookie("nick", $HTTP_SESSION_VARS[nick], time()+60*60*24*7);
setcookie("password", $HTTP_SESSION_VARS[password], time()+60*60*24*7);
setcookie("admin", $HTTP_SESSION_VARS[admin], time()+60*60*24*7);
}

$merken wird über eine checkbox eingegeben, daher ein array.


und hier die beiden teile zum auslesen:

aus der index.php:

if($HTTP_COOKIE_VARS["id"] && $HTTP_COOKIE_VARS["id"] != "")
{
$action = "cookie";
$laction = "get";
include("body/login.php");
}


und der include aus der login.php:


if($HTTP_COOKIE_VARS[id] && $HTTP_COOKIE_VARS[id] != "")
{
session_start();
include("sql.php");
$admin = $HTTP_COOKIE_VARS["admin"];
$nick = $HTTP_COOKIE_VARS["nick"];
$password = $HTTP_COOKIE_VARS["password"];
$id = $HTTP_COOKIE_VARS["id"];
$pruefen = "SELECT `nick`, `password`, `id`, `admin` FROM `userdata` WHERE 1 AND `id` = '".$id."' LIMIT 0, 1";
$Pruefen = mysql_query($pruefen, $mydb) or die("Anfrage nicht Möglich!");
$pruefen = mysql_fetch_array($Pruefen);
if($admin == $pruefen[admin] && $nick == $pruefen[nick] && $password == $pruefen[password] && $id == $pruefen[id])
{
session_register("admin");
session_register("nick");
session_register("password");
session_register("id");
}
else
{
setcookie("admin", "", time()-60*60*24*7);
setcookie("nick", "", time()-60*60*24*7);
setcookie("password", "", time()-60*60*24*7);
setcookie("id", "", time()-60*60*24*7);
}
}


wo liegt also das problem, dass ich die cookies nicht hinbekomme?

die login-maske findet ihr im übrigen auf Dorsten-network (URL in meiner Signatur).

Danke schonmal im voraus!

Matt
10.07.2002, 12:22:20
ist dir bewusst, dass das cookie nicht gerade sicher ist?
Mach dein cookie so:
speichere drin benutzernamen und md5(lastlogin)
und speichere in der datenbank das letzte login des benutzers (timestamp), wenn er sich einloggen will, vergleiche, ob timestamp (beide in md5) äquivalent sind, wenn ja, kannst du ihn als eingeloggt akzeptieren, kleiner fehler dabei ist nur, dass der user, wenn er sich zwischendurch bei einem anderen pc einloggt das cookie ungültig macht. vorteil ist jedoch, dass es nichts bringt, wenn das cookie geklaut wird, und wenn sich jemand einhacken will, muss er den zeitpunkt des letzten logins (in md5 codiert) wissen. Sicherheitsmängel würden mir dabei keine einfallen...
das umgeht auch das problem mit dem übergeben der cookie vars in die session vars..

Progman
10.07.2002, 13:54:56
und error_reporting(E_ALL); am Anfang um noch ein paar Fehlermeldungen zu entlocken. Muss dann aber an manchen stellen mit isset() und empty() arbeiten.

CyberAge
10.07.2002, 17:21:13
was nicht im quelltext ersichtlich ist, ist dass das passwort mit md5 verschlüsselt gespeichert wird (verschlüsselung geschieht außerhalb des codeschnipsels), nur er setzt noch nichtmal die cookies!

P4r4
11.07.2002, 00:24:34
also ich weis nicht, an welcher stelle deines scripts sich dieses stück befindet, aber da du oben drüber "......" geschrieben hast, nehme ich an, dass darüber noch einiges steht.

dazu solltest du wissen, dass cookies bestandteile des http-headers sind und folglich genauso wie bei der function header() aufgerufen werden müssen, -> also bevor irgendeine andere ausgabe an den browser erfolgt!! ;)


anbei setz nicht zuviele cookies 20 ist maximum! ;)
ich würde einige mit compact() und impact() zusammenfassen ;)

cYa
p4r4

CyberAge
11.07.2002, 00:39:17
also es sollen nur diese vier cookies gesetzt werden. ein fünftes cookie wird bei meiner umfrage gesetzt, und das funzt auch. nur hier halt nicht. und ja, du hast recht, über dem codeschnipsel ist noch jedemenge code und die cookies werden vor jeglicher ausgabe gesetzt (bessergesagt, bis zum header("location: ......"); wird nix geschrieben). nur leider setzt der die cookies nicht! DAS ist mein Problem, dass ich gelöst haben möchte!

P4r4
11.07.2002, 11:48:09
hmm

kommt vielleicht eine fehlermeldung "headers allready send" ?
also ich meine (weis nicht ganz genau ;) ), aber es könnte sein, dass wenn du schon die function header() verwendest hast, setcookie() nichtmehr geht!

wenn die fehler meldung "header allready.." kommt könnte es jedoch auch sein, dass du zwischen <?php (am anfang) ein leerzeichen gemacht hast (<? php), <- das zählt auch als header.
aber ansonsten bin ich mir ziemlich sicher, dass das wegen der function header() nicht geht.

schreib doch einfach probehalber mal ein einzelnes script wo nur die funktion setcookie drinnen steht!

CyberAge
13.07.2002, 23:46:20
nein, ich habe nicht ein leerzeichen davor sitzen. kann es vielleicht daran liegen, dass ich 4 cookies auf einmal setze?

bLizZ@WORK
17.07.2002, 11:14:16
Hi Cyberage!

Hast Du schon einmal versucht, nur EIN Cookie zu senden.
Wenn das Funktioniert, kannst du mit sprintf() ein Cookie zusammenschustern und mit explode() wieder auseinandernehmen.


Viele Grüße nach Dorsten

Sebastian-H. Picklum

www.3m.com/de

CyberAge
17.07.2002, 12:56:59
also bei meiner umfrage wird nur ein cookie gesendet und es funzt. ich hab mir mal das cookie angeschaut und der erste eintrag wird auch geschrieben, nur die letzten drei nicht. von daher gehe ich mal davon aus, dass ich nur ein cookie setzen darf. werde es mal ausprobieren wenn mein KK für meine domains durch ist!