000
20.03.2003, 21:11
Ornest
|
Juhu, ich hab ein kleines Problem und zwar bin ich gerade dabei, einen internen Bereich für meine Homepage zu coden und ich will, wenn man sich einloggt ein Cookie setzten. Soweit kein Problem, das Cookie wird auf jeden Fall auf "0" gesetzt und wenn man sich richtig eingeloggt hat auf "1".
<?PHP setcookie("login", "0", time()+3600, "/"); // pseudo if($login_korrekt) { $login = 1; // bzw. "1" } ?>
Auf anderen Seiten, die zum internen Bereich gehören, will ich dieses Cookie nun abfragen und zwar mit einer Funktion:
function checkLogin() { if(isset($login)) { if($login == 1 || $login == "1") { return true; } } echo '<script language="JavaScript">'; echo 'window.alert("Du musst dich erst einloggen");'; echo '</script>'; return false; }
Aber er gibt immer die Fehlermeldung aus. Nach einigem Suchen bin ich darauf gestoßen, dass auf diesen Seiten das Cookie garnicht mehr gesetzt ist. Warum? Ich denke das Cookie ist global!?
--
|
|
Profil || Suche
|
001
20.03.2003, 21:33
CN
|
1. ich würd eher $_COOKIE[login] verwenden 2. wieso machst du das nich mit sessions
--
|
|
Profil || Suche
|
002
20.03.2003, 21:35
Ornest
|
Sessions funzen bei mir (im Moment) noch nicht. Außerdem wollte ich sowieso mit Cookies ein Bisschen rumspielen, weil ich darin noch nicht sonderlich erfahren bin. Aber ich werde warscheinlich auf Sessions umsteigen.
Btw. danke für die schnelle Antwort ;)
Edit: Klappt aber leider trotzdem nicht, argh!
--
Dieser Beitrag wurde am 20.03.2003 um 21:37 von Ornest bearbeitet.
|
|
Profil || Suche
|
003
20.03.2003, 21:56
Megge
|
denkfehler: du setzt das cookie von anfang an, das ist zwar schonma schön und gut, nur musst du, wenn du die variable IM cookie überschreiben willst, das cookie neuschreiben...!
wieso ? beim aufruf einer seite wird dem server mitgeteilt, welche seite aufgerufen werden soll und gleichzeitig werden noch die entsprechenden cookies mitgeschickt. dann verarbeitet der server alles und spuckt die website wieder aus. zusätzlich können dann noch cookies übermittelt werden (neue oder veränderte oder der befehl ein cookie zu löschen). also es gibt 3 schritte beim aufruf: 1. daten an den server schicken 2. daten verarbeiten 3. cookies an den rechner schicken und die website schicken
dieses hintergrundwissen lässt sich leicht auf dsa problem anwenden: die variable 'login' aus dem cookie wird beim seitenaufruf an den server geschickt. dort ist sie dann als normale variable vorhanden. ewnn du die dann veränderst, wird nicht dsa cookie verändert, sondern nur die variable auf dem server. das muss man strikte auseinanderhalten ! wenn du nun die variable im cookie verändren willst, musst das cookie erneut schreiben, resp überschreiben. einfach:
setcookie("login","neuerwert",[neuezeit]);
und das cookie sit überschrieben. anders gehts nicht !
dann nochetwas: wenn du ein cookie auf der seite X deklarierst, resp. an den rechner schickst, so ist dieses für die aktuelle seite NOCHT NICHT gültig ! du musst also zusätzlich noch eine variable (gleichen namens mit vorteil) für den 'haus internen' zweck machen. beispiel:
<?php setcookie("login","1",time()+3600*24*7*365); print $login; // hier würde nichts ausgedruckt werden, da $login nicht definiert ist !! $login = 1; // ers jetzt ist $login verfügbar. ?>
um das einfacher zu machen:
<?php $login = 1; setcookie("login",$login,time()+3600*24*7*365); print $login; // $login wurde bereits ganz oben gesetzt, also wird 1 ausgedruckt ?>
ich hoffe, ich hab das verständlich erklärt
--
|
|
Profil || Suche
|
004
21.03.2003, 06:59
Ornest
|
Wow, danke.
--
|
|
Profil || Suche
|
005
14.05.2003, 20:49
snoopdog
|
hi, hab da auch nen kleines Prob mit dem cookie und bevor ich nen neuen Post erstelle hol ich diesen lieber nach vorne.
Also, irgendwie speichert der meine Variabel net in des cookie.
hier mal des stückchen code.
$buffer=$result[id]; echo $buffer; setcookie("id",$buffer,time(),0); echo $id;
er gibt nur den wert der in $buffer steht aus,aber nciht des was in dem cookie steht, wieso ??
--
Visit our 500er Gamer Lan @ www.evil-lanparty.de or @ www.evil-havoc.com Visit the HaVoc Lanparty Community @ www.havoc-lanparty.com
|
|
Profil || Suche
|
006
14.05.2003, 21:12
scus
|
probier mal
$buffer=$result["id"]; echo $buffer; setcookie("id", $buffer, time() + 3600); echo $id;
--
sincères amitiés scus -- Tand, Tand ist das Gebilde von Menschenhand
Dieser Beitrag wurde am 14.05.2003 um 21:15 von scus bearbeitet.
|
|
Profil || Suche
|
007
14.05.2003, 21:50
CN
|
is auch scheiss egal.. das is ne stil-frage
kriegst du en fehler? du darfst vor dem aufruf von setcookie nix ausgeben da sonst ein header gesendet wird siehe dazu auch mal php.net da steht sowas wieso liesst da nie jemand nach :|
--
|
|
Profil || Suche
|
008
14.05.2003, 22:06
Ornest
|
snoopdog postete hier mal des stückchen code.
$buffer=$result[id]; echo $buffer; setcookie("id",$buffer,time(),0); echo $id;
Außerdem wird das Cookie doch direkt wieder gelöscht, da das Verfallsdatum auf time() gestellt ist und doch auch direkt erreicht wird, oder nicht?!
--
|
|
Profil || Suche
|
009
14.05.2003, 22:32
Horat
|
time gibt als rückgabewert die vergange zeit seit des letzten unix-timestamps in sekunden zurück. Da die angabe im cookie allerdings auch in sekunden gemessen wird, ist die zeit nicht direkt abgelaufen. Jedoch ergibt das eine immer eine Höhere Zahl, die sich nur nach der Zeit richtete.
Sagen wir time() gibt den Rückgabewert 573809ms (angenommen!) zurück. Und es wird damit ein Cookie gesetzt. Dann "vergeht" das Cookie in exakt fünfhundertdreiundsiebzigtausendachthundertneun sekunden =) Folgerlich muss aber der Unix-Timestamp immer größer werden; also time() hat einen immer grüßeren Rückgabewert. Dadurch werden alle Cookies immer länger gespeichert, was allerdings nicht der sinn dieses Argimentes von setcookie ist. Auch hat time() keinerlei relevantnis zum ablaufdatum von cookies.
--
Bild Blog <--
|
|
Profil || Suche
|
010
15.05.2003, 07:47
CN
|
wo hast du den schrott her O_o
der time-param is der zeitpunkt an dem der cookie ablaufen soll das heisst: soll er in einer stunde ablaufen musst du time()+3600 nehmen
(abgesehen davon ist der return-wert von time() sec und nich ms)
also läuft nach deinem beispiel der cookie nicht in 573809ms sondern in time()-573809ms ab (bzw dem betrag davon)
soll der cookie "unendlich lang" halten so nimmst du 0 als wert für time
das php-manual gibts auch in deutsch also brauch keiner mit der ausrede kommen "ich versteh english nich so gut" O_o
--
Dieser Beitrag wurde am 15.05.2003 um 07:49 von CN bearbeitet.
|
|
Profil || Suche
|
011
15.05.2003, 16:33
Horat
|
mmh... ... stimmt *phpmanualaufmach*
--
Bild Blog <--
|
|
Profil || Suche
|
012
15.05.2003, 16:56
snoopdog
|
hab es jetzt hinbekommen mit den cookies. Kann es sein das bei cookies nur 3 parameter sein dürfen?? wenn ich nur 3 paras hab, dann geht sobald ich nen 4. hab geht es nicht mehr...
hab aber noch ne andere Frage, warum geht volgendes nicht??
<?php include("include.php"); if($logged!=1) { echo"<p>Du bist nicht eingeloggt, logge dich bitte erst unter Profil ein!</p>"; } else { echo"<form name=form method=get action=$PHP_SELF>"; echo"<p>Klicke hier,wenn du mit den <a href=index.php?page=agb target=_top>AGBs</a>einverstanden bist<input type=checkbox name=agb value=1></p>"; echo"<p align=center><input type=submit name=submit value=Anmelden></p>"; echo"</from"; } if($agb!=1) { echo"bla"; } ?>
der sollte ja eigneltichbla ausgebeb nur tut er nicht...
--
Visit our 500er Gamer Lan @ www.evil-lanparty.de or @ www.evil-havoc.com Visit the HaVoc Lanparty Community @ www.havoc-lanparty.com
Dieser Beitrag wurde am 15.05.2003 um 16:57 von snoopdog bearbeitet.
|
|
Profil || Suche
|
013
15.05.2003, 17:04
CN
|
Kann es sein das bei cookies nur 3 parameter sein dürfen?? nein.
und wenn du auf cookie vars zugreiffen willst: $_COOKIE[var];
ausserdem: </form> und nicht </from
--
Dieser Beitrag wurde am 15.05.2003 um 17:04 von CN bearbeitet.
|
|
Profil || Suche
|
014
15.05.2003, 17:30
scus
|
bool setcookie ( string name [, string value [, int expire [, string path [, string domain [, int secure]]]]]) -> http://www.php.net/manual/de/function.setcookie.php
du hattest "0" als path angegeben
--
sincères amitiés scus -- Tand, Tand ist das Gebilde von Menschenhand
|
|
Profil || Suche
|
015
15.05.2003, 21:34
Fraghunter
|
Auf welcher Seite willst du denn das Script einsetzten? *SicherheitslückeSchmeck*
Jeder User mit ein wenig erfahrung kann deine Seite aufrufen und einfach den Cookie wert login=1 vertäuschen. Und schon ist er drinne. Da du nicht (wie von CN empfohlen) "$_COOKIE" verwendest, reicht es sogar schon dein Script mit "deinscript.php?login=1" aufzurufen...
Tip: - Immer die zugehörigen Variablen Verwenden ($_COOKIE, $_POST, $_GET) - nicht einfach irgendwas im Cookie Speichern. Speichere den MD5-Code des Passwortes und überprüfe bei jedem Seitenaufruf den MD5-Code mit dem des richtigen Passwortes.
--
Nihil timeo, nulla re opprimor, nulli periculo cedo. www.TheDoenerKing.de
|
|
Profil || Suche
|