Willkommen ~Gast!
Registrieren || Einloggen || Hilfe/FAQ || Staff
Probleme mit der Registrierung im Forum? Melde dich unter registerEin Bild.
Autor Beitrag
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".

Quellcode:<?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:

Quellcode: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!?

--

zum Seitenanfang zum Seitenende 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

--

zum Seitenanfang zum Seitenende 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.
zum Seitenanfang zum Seitenende 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:
Quellcode: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-Quellcode:<?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-Quellcode:<?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

--

zum Seitenanfang zum Seitenende Profil || Suche
004
21.03.2003, 06:59
Ornest



Wow, danke.

--

zum Seitenanfang zum Seitenende 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.
Quellcode:$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

zum Seitenanfang zum Seitenende Profil || Suche
006
14.05.2003, 21:12
scus



probier mal
Quellcode:$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.
zum Seitenanfang zum Seitenende 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 :|

--

zum Seitenanfang zum Seitenende Profil || Suche
008
14.05.2003, 22:06
Ornest



Zitat:
snoopdog postete
hier mal des stückchen code.
Quellcode:$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?!

--

zum Seitenanfang zum Seitenende 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 <--

zum Seitenanfang zum Seitenende 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.
zum Seitenanfang zum Seitenende Profil || Suche
011
15.05.2003, 16:33
Horat



mmh...
... stimmt
*phpmanualaufmach*

--

Bild Blog <--

zum Seitenanfang zum Seitenende 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??

Quellcode:<?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.
zum Seitenanfang zum Seitenende Profil || Suche
013
15.05.2003, 17:04
CN



Zitat:
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.
zum Seitenanfang zum Seitenende 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

zum Seitenanfang zum Seitenende 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

zum Seitenanfang zum Seitenende Profil || Suche