PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [PHP] Kekse



Maisaffe
18.03.2005, 13:47
<head>
<?php // Kekse
// Code bedeutet laut gfx-world: setcookie(name, wert, haltbarkeit, verzeichnis, domain, sicherheit);
12: setcookie("7159052138", $eintraege_ok, time()+60*1, "7159052138", "http://dennismeckel.de.sr", 1);
13: echo $_COOKIE['159052138'];
?>
<!-- CSS [...]

Leider klappt das ganze nicht so...


Warning: Cannot modify header information - headers already sent by (output started at bla.php:4) in E:\Eigene Dateien\HomePage\!nternetseiten\d_m\gaestebuch\speichern.php on line 12

Notice: Undefined index: 159052138 in bla.php on line 13

Dennis

Lukas
18.03.2005, 13:59
Du musst in die erste Zeile deiner Datei <?php schreiben. Davor dürfen keine Zeichen stehen. Zuerst werden die Header-Informationen und dann die Html-Seite übertragen. Sobald ein Byte der Html-Seite (und sei es ein Zeilenumbruch oder Leerzeichen) gesendet wird, wird der http-Header (von dem die Cookies ein Bestandteil sind) gesendet, und du kannst keine Cookies mehr setzen. Also kein echo oder direkt Html-Code vor dem setcookie()-Befehl verwenden.

Dingsi
18.03.2005, 14:00
For setcookie() darf genauso wie vor header() und session_start() nichts gesendet werden. Senden heißt hier: print(), echo und ?> non-php <?php.
In deinem Fall trifft das letzte zu: Du sendest vor dem setcookie() ein <head>. Lösung: Nichts davor senden oder Output Buffering (http://de2.php.net/manual/de/ref.outcontrol.php).

Übermäßiger [tt]-Gebrauch. <3 <3

Maisaffe
18.03.2005, 15:21
Kann ich überhaupt dann Variablen verwenden in Cookies?
So 'datum' oder so etwas ähnliches (das im cookie das datum des erstellens steht).

Geht nicht:

1: <?php setcookie("7159052138", "eintraege_ok", time()+60*1, "7159052138", "http://dennismeckel.de.sr", 1); ?>

145: <?php echo $_COOKIE['7159052138']; ?>
Meldung:

Notice: Undefined index: 7159052138 in bla.php on line 145

Dennis

Lukas
18.03.2005, 15:28
Hast du das Ganze in unterschiedlichen Scripten stehen? Du kannst auf ein Cookie erst zugreifen, wenn es gesetzt wurde. Da Php erst ausgeführt wird, und dann das Ergebnis an den Surfer schickt, kannst du auf ein Cookie nicht in dem Script zugreifen, in dem du es gesetzt hast. Ebenso wirst du einen Fehler kriegen, falls der User dein Cookie nicht annimmt. Am besten, du setzt vor alle Codestellen, die Cookies auslesen, folgendes:
if(isset($_COOKIE['7159052138'])){
# hier dein Code
} else{
echo "Sie m&uuml;ssen Cookies aktivieren!<br />\n";
}

dadie
18.03.2005, 16:09
Am besten, du setzt vor alle Codestellen
Also am Besten währe doch der Zweitzugriff oder ein Direktzugriff über Session oder irre ich mich da ? IMO ahbe ich nix dagegen das du Cookies benutz dennis du musst dir nur imklahren sien das es user gibt die sie Aus haben darum bin z.B. ich auf Session umgestiegen wobei es kein Umstieg war ist ja immernoch ein Cookie nur dieser wird auf dem Server gespeichert und kommt somit nie zu dir was IMO auch sicherer ist da man Cookies auch anfangen kann was sehr ungünstig ist wenn das PWD unverschlüsst im Cookie steht ^^

Maisaffe
18.03.2005, 20:12
Also am Besten währe doch der Zweitzugriff oder ein Direktzugriff über Session oder irre ich mich da ? IMO ahbe ich nix dagegen das du Cookies benutz dennis du musst dir nur imklahren sien das es user gibt die sie Aus haben darum bin z.B. ich auf Session umgestiegen wobei es kein Umstieg war ist ja immernoch ein Cookie nur dieser wird auf dem Server gespeichert und kommt somit nie zu dir was IMO auch sicherer ist da man Cookies auch anfangen kann was sehr ungünstig ist wenn das PWD unverschlüsst im Cookie steht ^^
K, dann mach mir mal bitte nen Beispiel einer Seesion Dadie, bin momentan etwas faul wie man merkt. ;)

Dennis

dadie
18.03.2005, 20:18
K, zumglück habe ich in letzter zeit mit den Sessions gearbeitet ^^



<?php
session_start(); //Sagt Session beginnen ^^
session_register ('nickname'); //Legt sozusagen eine Arrary Spalte mit dem namen 'nickname' an
session_register ('pwd'); // Sihe oben
session_register ('session'); // Sihe oben

$_SESSION['session'] = "1" ; //Zuweissung einer Session bzw. den inhalt einer Arrary Spalte

$_SESSION['pwd'] = $pwd ;// Sihe oben
$_SESSION['nickname'] = $nickname ; // Sihe oben

echo '<a href="./index.php?sonswas=inhalt&'.session_name().'='.session_id().'" title="#" >User-System</a>' //Beispiel Link
?>


Ej nach Host einstellung muss man die Session ID nicht über die URL weitergeben ist aber IMO besser es immer zu machen also einfach an jeden Link


&'.session_name().'='.session_id().'


WTF ?? Das leer zeichen ist da nicht gewollte !!!
bzw.


&".session_name()."=".session_id()."

Jenachdem wie du das echo einleitest bei "" Variante 2 bei '' Variante 1

Dann kann noch dieser Link helfen

http://be2.php.net/manual/de/ref.session.php

ich hoffe ich konnte helfen ^^

Dingsi
18.03.2005, 21:07
session_register ('nickname'); << Veraltet. Musste man nur machen, wenn man $nickname benutzen wollte. Bei $_SESSIONS['nickname'] brauch man kein register mehr.

dadie
18.03.2005, 21:30
session_register ('nickname'); << Veraltet. Musste man nur machen, wenn man $nickname benutzen wollte. Bei $_SESSIONS['nickname'] brauch man kein register mehr.

Sagte Dingsi und hat es nie Probiert Gott wer inerinern uns an meinem Top PHP5 Neuester Apachie und ? Muss Regen sonst nimmt er sie nett an ! Auserdem muss man damit rechnen das es noch php4 oder gar php3 server gibt darum sollte man sowas zur Sicherheit immer einbauen !

Dingsi
18.03.2005, 22:10
Und ob ich es probiert bzw. exzessiv benutzt hab. o_O. Sowohl mit PHP4 als auch mit 5. Bei einem Server mit PHP3 gibt es $_SESSION übrigens gar nicht. Da hast du recht, da muss man session_register benutzen.

Oh. In PHP3 gibt es GAR KEINE Sessions.


Wenn Sie wollen, dass ihr Script unabhängig von der Einstellung von register_globals funktioniert, müssen Sie stattdessen das Array $_SESSION verwenden, weil $_SESSION-Einträge automatisch registriert werden. Wenn Sie in Ihrem Script session_register() verwenden, funktioniert es nicht in Umgebungen, in denen die PHP-Anweisung register_globals deaktiviert ist.
...
Wenn Sie $_SESSION (oder $HTTP_SESSION_VARS) verwenden, sollten Sie nicht session_register(), session_is_registered() und session_unregister() verwenden.

Maisaffe
20.03.2005, 10:20
Wo find ich die PHP.ini?
Bzw. kann ich die überhaupt benutzen ohnen nen eigenen Server? (da ich sonst doch die Funpic einstellungen habe, oder nicht?).

Dennis

dead_orc
20.03.2005, 10:35
Auf deinem eigenen Server sollte sie unter Windows unter C:\Windows oder C:\Windows\System32 sein, bei Linux bin ich mir nicht sicher (ich glaube irgendwo unter /etc/apache oder so...)
Bei Funpic kannst du die php.ini nicht verändern und musst dich mit den gegebenen Einstellungen zufrieden geben... Auf manchen Servern kannst (besonders, wenn die Einstellung nur für eine Skripte da ist) mit ini_set (http://de2.php.net/ini_set) die Einstellungen temporär zur Laufzeit des Skriptes ändern, das wird allerdings bei Funpic (und vielen anderen auch) aus Sicherheitsgründen unterbunden. Welche Konfiguration bei Funpic eingestellt ist kannst du unter http://phpinfo.de.funpic.de/ nachgucken.

Lukas
20.03.2005, 10:55
Unter Linux liegt die Datei in /etc (zumindest bei mir, Suse 9.2).
Afaik ist das nicht davon abhängig, ob du einen eigenen Server hast, sondern die Datei hast du, wenn du den Php-Interpreter auf dem Rechner hast.

Maisaffe
20.03.2005, 10:59
Ähm ja >__>

Ich habe jetz hier ne Session, die jetz zB. nen Counter nicht erhöhen soll, nachdem der User auf der Seite war.
Unter Funpci lebt die Session wie lange?
Und wenn ne Session wie ein Cookie ist, woher weiß dann der Server welcher User auf der Seite ist? (IP ändert sich ja).

Dennis

dead_orc
20.03.2005, 12:11
Wenn ich die phpinfo() von Funpic richtig deute leben Sessions bei Fupic 180 Minuten (kann mich aber irren). Der Unterschied zwischen Sessions und Cookies ist, dass Cookies auf dem Clientrechner, Sessions auf dem Serverrechner gespeichert werden. Der Server erkennt, welcher PC auf die Seite zugreift durch dir Session-ID (SID) welche im Normalfall in einem Cookie gespeichert wird. Sie kann aber auch per Formular oder Adresszeile übergeben werden. Diese SID ist ein MD5-verschlüsselter Code, der einem Menschen nichts sagt. Wenn du mehr über Sessions wissen willst, guck mal im PHP-Handbuch (http://de2.php.net/manual/de/ref.session.php) nach ;)

@masterquest: Naja, fast richtig. Hab ja bisher nur Knoppix mal benutzt, und ich glaube, da lag die Datei in /etc/apache, obwohl ich keine Möglichkeit gefunden habe, einen Apache zu starten. Naja, vielleicht bin ich einfach nur zu blöd (oder irre mich).

Maisaffe
20.03.2005, 13:31
Oo dumm irgendwie, wenn das Teil die ID in nen Cokkie speichert, braucht der Surfer doch Cookies, oder net?

Dennis

dadie
20.03.2005, 15:03
Oo dumm irgendwie, wenn das Teil die ID in nen Cokkie speichert, braucht der Surfer doch Cookies, oder net?

Dennis

Jup aber man kann wie gesagt die ID kann auch über adresszreile oder über ein inpute hidde übergebn.

Maisaffe
20.03.2005, 15:55
Hm, eigentlich ist es so umständlicher, ich brauch nurn http://www.multimediaxis.de/images/smilies/old/1/keks.gif damit ich net ein Gespamms in nem Gästebuch und ein immer steigenden Counter habe.

Darum poste ich nochchmal den Code:

001: <?php setcookie("7159052138", "eintraege_ok", time()+60*1, "7159052138", "http://dennismeckel.de.sr", 1); ?>
ABC: [...]
DEF: <body>
145: <?php echo $_COOKIE['7159052138']; ?>
XYZ: [...]

Notice: Undefined index: 7159052138 in E:\Eigene Dateien\HomePage\!nternetseiten\d_m\gaestebuch\speichern.php on line 145


Dennis
PS: ja man kann einen http://www.multimediaxis.de/images/smilies/old/1/keks.gif löschen oder nicht annehmen, na und?

dadie
20.03.2005, 16:04
Also ich glaube es liegt am Cookie Code



setcookie("Cookiename", "Cookieinhalt",time()+9600);


und auslesen tuht man den cookie einfach $Cookiename

naja wenn ich meht als 1 Inhalt in einem Cookie speichern willl mache ich das dann z.B. so


$user_daten_save = "$nickname@$pwd";
setcookie("Cookie", $user_daten_save,time()+9600);


$cookielesen = preg_split("/@/", $Cookie);

$nickname_login = $cookielesen [0];
$pwd_login = $cookielesen[1];

Tomarus
20.03.2005, 18:24
und auslesen tuht man den cookie einfach $Cookiename
Naja, mag sicherlich teilweise gehen, dennoch sollte man $_COOKIE['name'] (bei PHP > 4.1) bzw. $HTTP_COOKIE_VARS['name'] (darunter) nehmen. Allerdings würde ich mich beim Cookiesetzen auch auf die ersten drei Werte beschränken, bis auf den ersten sind schließlich alle optional. Da ich jetzt keine Ahnung hab, was genau der Path- und der Secure-Wert bringen, und ich persönlich auch nix damit anfangen kann, würde ich die einfach weglassen. Kann ja auch nichts groß passieren. Bei Opera wird die Domain z.B. auch automatisch mitgespeichert, sodass es nicht zu Problemen kommen kann, wenn eine andere Seite ein gleichnamiges Cookie verwendet.

setcookie ('7159052138', 'eintrag_ok', time() + 60);
echo ($_COOKIE['7159052138']);

Chocwise
20.03.2005, 18:37
Naja, mag sicherlich teilweise gehen, dennoch sollte man $_COOKIE['name'] (bei PHP > 4.1) bzw. $HTTP_COOKIE_VARS['name'] (darunter) nehmen. Allerdings würde ich mich beim Cookiesetzen auch auf die ersten drei Werte beschränken, bis auf den ersten sind schließlich alle optional. Da ich jetzt keine Ahnung hab, was genau der Path- und der Secure-Wert bringen, und ich persönlich auch nix damit anfangen kann, würde ich die einfach weglassen. Kann ja auch nichts groß passieren. Bei Opera wird die Domain z.B. auch automatisch mitgespeichert, sodass es nicht zu Problemen kommen kann, wenn eine andere Seite ein gleichnamiges Cookie verwendet.

setcookie ('7159052138', 'eintrag_ok', time() + 60);
echo ($_COOKIE['7159052138']);
Mit dem Script-Attribut kann man einschränken welches Script auf die Cookies später zurückgreifen darf. Lässt man dieses Attribut leer, wird AFAIK standardmäßig der Ordnerpfad des setzenden Scripts verwendet.
Liegt das Script, das den Cookie setzt, z.B. in /ordner/scripte/ so wird dieser Pfad standardmäßig als Scriptpfad für den Cookie verwendet.
Damit können nur Scripte auf den Cookie zugreifen, die in jenem Pfad liegen bzw. in Ordnern darunter.
Setzt man das Attribut in der setcookie-Funktion allerdings auf "/" so kann jedes Script einer Domain auf ein mit dieser Domain gesetzten Cookie zugreifen.

Das Secure-Attribut lässt nur eine verschlüsselte Übertragung des Cookies zu. Sprich: Nur wenn es möglich ist den Cookie per SSL an den Client zu übertragen, wird er übermittelt, sonst nicht.

Maisaffe
21.03.2005, 18:53
setcookie ('7159052138', 'eintrag_ok', time() + 60);
echo ($_COOKIE['7159052138']);
Klappt kein Meter...

Oo kann mir einer von Euch mal ne php schreiben indem so ein dummes Kekse setzen funktioniert? (Inhalt ist wurscht)

Dennis

Chocwise
21.03.2005, 19:16
setcookie ('7159052138', 'eintrag_ok', time() + 60);
echo ($_COOKIE['7159052138']);
Klappt kein Meter...

Oo kann mir einer von Euch mal ne php schreiben indem so ein dummes Kekse setzen funktioniert? (Inhalt ist wurscht)

Dennis

setcookie("joa","nee",time()+1200);
So in etwa setz ich meine Cookies immer und es funktioniert.
Denk nur daran, das du den Wert des gesetzen Cookies nicht im selben Scriptdurchlauf auslesen kannst. In einem Scriptdurchlauf wird der Cookie gesetzt, beim Reload und somit zweiten Scriptdurchlauf wird der Cookie erst ausgelesen.

Vielleicht waren die 60 Sekunden auch etwas zu knapp gesetzt... auch wenn ich mich frage weshalb du mehr als 60 Sekunden für den Reload gebraucht haben könntest. :D

dead_orc
22.03.2005, 07:19
Da Cookies erst nach einem Reload benutzt werden können, würde ich noch folgendes machen:

<?php
setcookie("joa","nee",time()+1200);
header("Location: http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']);
?>
Dadurch wird sozusagen ein Reload der Seite ausgeführt, da der Browser auf die aufgerufene Seite weitergeleitet wird. Solltest du $_POST Variablen zu verarbeiten hast, musst du das vor dem Reload machen, da sie hinterher nicht mehr verfügbar sind (ein schönder Nebeneffekt: Wenn man die Seite von Hand reloaded, werden die POST-Variablen nicht noch einmal gesendet, wie es sonst der Fall wäre)

Chocwise
22.03.2005, 15:39
Da Cookies erst nach einem Reload benutzt werden können, würde ich noch folgendes machen:

<?php
setcookie("joa","nee",time()+1200);
header("Location: http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']);
?>
Dadurch wird sozusagen ein Reload der Seite ausgeführt, da der Browser auf die aufgerufene Seite weitergeleitet wird. Solltest du $_POST Variablen zu verarbeiten hast, musst du das vor dem Reload machen, da sie hinterher nicht mehr verfügbar sind (ein schönder Nebeneffekt: Wenn man die Seite von Hand reloaded, werden die POST-Variablen nicht noch einmal gesendet, wie es sonst der Fall wäre)
Uhm...
So würd ichs nicht machen. :D
Der Server würd sich den Hintern abforwarden. ;)
Zumindest denk ich das er das tut wenn ich mir den Code anschau.
Man sollte das eher so lösen:

<?php
setcookie("joa","nee",time()+1200);
if(!isset($_COOKIE['joa'])){
header("Location: http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']);
}
?>

dead_orc
22.03.2005, 15:46
Ich ging davon aus, dass der Cookie nicht bei jedem Aufruf gesetzt wird, da das IMO keinen Sinn ergeben würde. Du hast aber natürlich Recht: Wenn der Code nicht sowieso schon in einer derartigen if-Konstruktion ist, würde er sich "den Hintern abforwarden". *sichdiesesgeileWortnotiert*

Maisaffe
22.03.2005, 15:53
<?php
setcookie("joa","nee",time()+1200);
if(!isset($_COOKIE['joa'])){
header("Location: http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']);
}
?>
Das Script macht genau was?
ES prüft ob die Cookie 'joa' auf dem PC ist, und wenn ja/nein passiert was?

Ich will nur son Gästebuch Teil machen.

Dennis

Tomarus
22.03.2005, 16:16
Das Script macht genau was?
ES prüft ob die Cookie 'joa' auf dem PC ist, und wenn ja/nein passiert was?s
Wenn der Cookie gesetzt ist, leitet es auf die Seite weiter, aktualisiert sie also. Dadurch kannst du die Cookies abfragen, was du noch nicht kannst, wenn die Cookies gerade erst in diesem Script gesetzt wurden.

Maisaffe
22.03.2005, 17:46
Wenn der Cookie gesetzt ist, leitet es auf die Seite weiter, aktualisiert sie also. Dadurch kannst du die Cookies abfragen, was du noch nicht kannst, wenn die Cookies gerade erst in diesem Script gesetzt wurden.
cookie gesetzt = weiterleiten (ok)
wenn kein cookie gesetzt ist, was passiert dann?
Dann wird die Seite nich refreshed (angenommen cookies sind deaktiviert).

Also müsste ich das so machen:

Cookie setzen (Zeile1)
Gästebuch Eintrag speichern
Cookie abfragen und weiterletien

das !sset, bedeutet es, das if aktiviert wird solange der Cookie in seiner Zeit ist? (Sprich das die 120Sekunden vorbei sind?)

bzw. kann man so eine lösung machen:

<?php
setcookie("joa","nee",time()+1200);
if(!isset($_COOKIE['joa'])){
// Hier: Code für Einträge speichern (Gästebuch)
header("Location: http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']);
}
?>

Oder muss das so laufen:

<?php;
if(!isset($_COOKIE['joa'])){
header("Location: http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']);
}
else {
// Hier: Code für Einträge speichern (Gästebuch)
setcookie("joa","nee",time()+1200) // Cookies gehn nur am Anfang oder was war da nochmal? Oô *grml*
header("Location: http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']);
}
?>

Dennis

Chocwise
22.03.2005, 19:27
@ dennis:
Hmja, ich hab grad wenig Muße um über PHP groß nachzudenken.
Aber mein Code liest sich so:

Setze ein Cookie mit dem Namen "joa" und dem Wert "nee".
Wenn die Cookievariable "joa" nicht gesetzt (Cookie nicht vorhanden) ist, reloade diese Scriptseite.
Nach dem Reload wird der Cookie gesetzt sein. Es sei denn der Besucher nimmt gar keine Cookies an. Dann forwarded sich der Server den Hintern ab. :D