HTTP_COOKIE_VARS
Jan
- php
Nen wunderschönen Guten Morgen,
ich möchte anhand der HTTP_COOKIE_VARS das Cookie überprüfen, um ein bestimmts Benutzerprofil anzeigen zu lassen. Jetzt wollte ich mir erstmal ein komplettes Cookie ausgeben lassen um zu sehen was steht überhaupt drin.
Leider bekomme ich hier nur einen weissen Bildschirm zu sehen.
Hat jemand vielleicht einige gute Beispiele oder ein gutes Tut ich habe mein Lehmaterial verlegt und finde es auf Teufel komm raus nicht wieder ;-)
Danke Jan
Hi,
Leider bekomme ich hier nur einen weissen Bildschirm zu sehen.
was hast Du denn schon getestet?
Versuche:
echo '<pre>';
print_r($_CCOKIE);
echo '</pre>';
Gruesse,
Lynky
Hi,
was hast Du denn schon getestet?
Versuche:
echo '<pre>';
print_r($_CCOKIE);
echo '</pre>';
Gut, jetzt habe ich die Sess id, ich denke mit Ihr kann ich sehr gut arbeiten!
Ich danke dir
Gruesse
Jan
Hi Linky,
nun leider scheint es aber in meiner SQL Abfrage nicht zu funktionieren,
mysql_fetch_array(mysql_query("SELECT * FROM user WHERE sessid='($_COOKIE)'"));
oder muss ich es so schreiben:
mysql_fetch_array(mysql_query("SELECT * FROM user WHERE sessid='print_r($_COOKIE)'"));
?
habe es auch probiert, indem ich erst die sessid in einer neuen Variable gespeichert habe, allerdings bekam ich trotzdem keine Ausgabe..
Gruß
Jan
Hi Jan,
warum verwendest Du nicht einfach session_id(), wenn es die ist, Du Du eigentlich moechtest.
Also so:
mysql_fetch_array(mysql_query("SELECT * FROM user WHERE sessid='" .session_id(). "'"));
Gruesse,
Lynky
Hi Jan,
mysql_fetch_array(mysql_query("SELECT * FROM user WHERE sessid='" .session_id(). "'"));
Nun, ich bekomme ein völlig falsches Profil, und einen Haufen SQL Fehler innerhalb des Frames...
aber es kommt was, wenigstens etwas...
vielleicht möchtest du es dir anschauen, und mir sagen was schief gegangen ist, ich weiss es nicht...
bei Bedarf kann ich auch Quellcode posten
Gruß Jan
Hi Jan,
mysql_fetch_array(mysql_query("SELECT * FROM user WHERE sessid='" .session_id(). "'"));
Nun, ich bekomme ein völlig falsches Profil, und einen Haufen SQL Fehler innerhalb des Frames...
aber es kommt was, wenigstens etwas...vielleicht möchtest du es dir anschauen, und mir sagen was schief gegangen ist, ich weiss es nicht...
bei Bedarf kann ich auch Quellcode posten
Gruß Jan
Hi Linky
mysql_fetch_array(mysql_query("SELECT * FROM user WHERE sessid='" .session_id(). "'"));
Nun, ich bekomme ein völlig falsches Profil,
Sie lappen ganz übereinander und es sind Profile von welchen, die noch keine Sessid haben, sich also noch nicht eingeloggt haben!
und einen Haufen SQL Fehler innerhalb des Frames...
Nun, hier habe ich mir selbst geholfen, die SQL Fehler sind weg!
aber es kommt was, wenigstens etwas...
vielleicht möchtest du es dir anschauen, und mir sagen was schief gegangen ist, ich weiss es nicht...
eigentlich dürftest du ja gar nichts zu sehen bekommen... wie machen wir das?
bei Bedarf kann ich auch Quellcode posten
Gruß Jan
Hi,
mysql_fetch_array(mysql_query("SELECT * FROM user WHERE sessid='" .session_id(). "'"));
das ist ja nur einleuchtend - wahrscheinlich pruefst Du nicht einmal, ob session_id() einen wert hat!
das mit dem Quellcode posten macht denke ich durchaus sehr viel sinn! das haettest du auch frueher vorschlagen koennen.
ich bitte darum ;)
Lynky
Hi,
mysql_fetch_array(mysql_query("SELECT * FROM user WHERE sessid='" .session_id(). "'"));
das ist ja nur einleuchtend - wahrscheinlich pruefst Du nicht einmal, ob session_id() einen wert hat!
Welchen Wert soll session_id denn haben?
das mit dem Quellcode posten macht denke ich durchaus sehr viel sinn! das haettest du auch frueher vorschlagen koennen.
$qid = mysql_query("SELECT * FROM user WHERE sessid='".session_id()."'");
while($data = mysql_fetch_array($qid)) {
$sdata = mysql_fetch_array(mysql_query("SELECT * FROM user_details WHERE uid='$data[0]'"));
?>
<table border="1" boder-color="#000000" bgcolor="#DEDEDE" cellspacing="0" cellpadding="0" width="540">
<tr>
<td align="center"><font size="1"><a href="./updateprofileform.php?uid=<? echo ?>">Profil bearbeiten</a></td>
<td align="center">PN´s</td>
<td align="center">Gästebuch</td>
<td align="center">Friends suchen</font></td>
</tr>
</table>
<br>
<table border="0" cellspacing="0" cellpadding="0">
<tr>
<td width="350">
<table border="0" cellspacing="6" cellpadding="0" valign="top" align="left">
<tr>
<td width="150"><b>Username:</b></td>
<td><? echo $data[1]; ?></td>
<tr>
<td width="150"><b>Name:</b></td>
<td><? echo $data[4]; ?> <? echo $data[3]; ?></td>
<tr>
<td width="150"><b>Wohnort:</b></td>
<td><p><? echo $sdata[7]; ?></td>
<tr>
<td width="150"><b>Alter:</b>
<td>
<?
$alter = date("Y")-$sdata[6];
if(($monat[5] > date("m")) || ($monat[5] == date("m") && $tag[4] < date("d"))) {
$alter--;
}
echo $alter; ?> Jahre
</td>
<tr>
<td width="150"><b>ICQ:</b>
<td><img src="http://status.icq.com/online.gif?web=<? echo $sdata[3];?>&img=5"> <? echo $sdata[3]; ?> </td>
<tr>
<td width="150"><b>E-Mail:</b></td>
<td>
<?
if(mysql_num_rows(mysql_query("SELECT showemail FROM user_details WHERE uid='$data[0]' AND showemail='Y'"))) {
echo "<a href="mailto: $data[5];">$data[5]</a>"; }
else {
echo "keine Angabe";
}
?></td>
<tr>
</tr>
</table>
</td>
<td valign="top" align="right">
<img style="border-color:#000000" src="./userimg.php?uid=<? echo $data[0]; ?> width="180" height="135" border="2" alt=<? echo $data[1]; ?>></a>
</td>
</tr>
</table>
<?
$idata = mysql_fetch_array(mysql_query("SELECT * FROM user_interessen WHERE uid='$data[0]'"));
?>
<table border="0" cellspacing="6" cellpadding="0"
<tr>
<td width="150"><b>Interessen:</b>
<td><input type="radio" <? if($idata[1] == "Y") echo "checked"; ?>> Fernsehen</td>
<td><input type="radio" <? if($idata[2] == "Y") echo "checked"; ?>> Kino</td>
<td><input type="radio" <? if($idata[3] == "Y") echo "checked"; ?>> Freunde treffen</td>
<tr>
<td> </td>
<td><input type="radio" <? if($idata[4] == "Y") echo "checked"; ?>> Flirten</td>
<td><input type="radio" <? if($idata[5] == "Y") echo "checked"; ?>> Computer</td>
<td><input type="radio" <? if($idata[6] == "Y") echo "checked"; ?>> Disco/Partys</td>
<tr>
<td> </td>
<td><input type="radio" <? if($idata[7] == "Y") echo "checked"; ?>> Sport</td>
<td><input type="radio" <? if($idata[8] == "Y") echo "checked"; ?>> Musik</td>
<td><input type="radio" <? if($idata[9] == "Y") echo "checked"; ?>> Musik machen</td>
<tr>
<td> </td>
<td colspan="3"> </td>
</tr>
<?
$mdata = mysql_fetch_array(mysql_query("SELECT * FROM user_musik WHERE uid='$data[0]'"));
?>
<tr>
<td width="150"><b>Musik:</b></td>
<td><input type="radio" <? if($mdata[1] == "Y") echo "checked"; ?>> R'n'B</td>
<td><input type="radio" <? if($mdata[2] == "Y") echo "checked"; ?>> Pop/Charts</td>
<td><input type="radio" <? if($mdata[3] == "Y") echo "checked"; ?>> Techno/House</td>
<tr>
<td> </td>
<td><input type="radio" <? if($mdata[4] == "Y") echo "checked"; ?>> HipHop</td>
<td><input type="radio" <? if($mdata[5] == "Y") echo "checked"; ?>> 80's</td>
<td><input type="radio" <? if($mdata[6] == "Y") echo "checked"; ?>> Raggae</td>
<tr>
<td> </td>
<td><input type="radio" <? if($mdata[7] == "Y") echo "checked"; ?>> Heavy Metall</td>
<td><input type="radio" <? if($mdata[8] == "Y") echo "checked"; ?>> Klassik/Oper</td>
<td><input type="radio" <? if($mdata[9] == "Y") echo "checked"; ?>> Rock</td>
<tr>
<td> </td>
<td colspan="3"> </td>
</tr>
<?
$edata = mysql_fetch_array(mysql_query("SELECT * FROM user_essen WHERE uid='$data[0]'"));
?>
<tr>
<td width="150"><b>Bevorzugtes Essen:</b></td>
<td><input type="radio" <? if($edata[1] == "Y") echo "checked"; ?>> Fast Food</td>
<td><input type="radio" <? if($edata[2] == "Y") echo "checked"; ?>> Vegetarisch</td>
<td><input type="radio" <? if($edata[3] == "Y") echo "checked"; ?>> Türkisch</td>
<tr>
<td> </td>
<td><input type="radio" <? if($edata[4] == "Y") echo "checked"; ?>> Deutsch</td>
<td><input type="radio" <? if($edata[5] == "Y") echo "checked"; ?>> Griechisch</td>
<td><input type="radio" <? if($edata[6] == "Y") echo "checked"; ?>> Italienisch</td>
<tr>
<td> </td>
<td><input type="radio" <? if($edata[7] == "Y") echo "checked"; ?>> Chinesisch</td>
<td><input type="radio" <? if($edata[8] == "Y") echo "checked"; ?>> Französisch</td>
<td><input type="radio" <? if($edata[9] == "Y") echo "checked"; ?>> Sonstiges</td>
<tr>
<td colspan="4"> </td>
<tr>
<td width="150"><b>Flirtstatus:</b>
<td><input type="radio" <? if($sdata[8] == "v") echo "checked"; ?>> Vergeben!</td>
<td><input type="radio" <? if($sdata[8] == "s") echo "checked"; ?>> Single</td>
<td><input type="radio" <? if($sdata[8] == "h") echo "checked"; ?>> Verheiratet!</td>
</tr>
</table>
ich bitte darum ;)
Den Gefallen werde ich dir tun!;)
Gruß Jan
Hi,
zunaechst einmal: aus deinem code steht absolut nichts ueber ein cookie!
Also nocheinmal: WO/WIE speicherst Du denn die session id? Verwendest Du wirklich PHP sessions oder schreibst Du manuell Werte in das cookie? wenn letzteres, welchen namen hat das cookie? Was gibt Dir denn das folgende Statement aus??
echo '<pre>';
print_r($_COOKIE);
echo '</pre>';
...und was dieses:
echo session_id();
tja, ohne informationen gibts auch keine antwort :)
Wie auch immer, Du kannst Deinen Code schon einmal stark lesbarer machen (und den skript ablauf beschleunigen!), indem Du die ersten 4 Reihen mit den folgenden erstzt:
$result = mysql_query("SELECT * FROM user,user_details WHERE user.sessid='".session_id()."' AND user.uid = user_details.uid LIMIT 1");
$sdata = mysql_fetch_assoc($result);
Danach kannst Du im weiteren Skript ueber die Datenbankfeldnamen auf das array zugreifen, z.B. $sdata['uid'] anstelle von $sdata[0] und Du hast nur noch ein array anstelle von 2. Du kannst Dir auch alle die uebrigen Queries sparen, indem Du das gleiche mit den Tabellennamen dort in der ersten Query machst (... AND user.uid = user_musik.uid AND user.uid = user_interessen.uid ...). Dann solltest Du aber sicher sein, dass auch wirklich alle tabellen einen datensatz fuer eben diesen benutzer enthalten.
Lynky
Hi Lynky,
zunaechst einmal: aus deinem code steht absolut nichts ueber ein cookie!
Natürlich nicht ich möchte jetzt anhand des gespeicherten Cookies erfahren wer sich gerade eingeloggt hat und ihm dabei Zugriff auf sein "Profil" gewähren!
Also nocheinmal: WO/WIE speicherst Du denn die session id?
Die session id wird bei der Anmeldung generiert und in das Cookie geschrieben
Verwendest Du wirklich PHP sessions oder schreibst Du manuell Werte in das cookie? wenn letzteres, welchen namen hat das cookie? Was gibt Dir denn das folgende Statement aus??
echo '<pre>';
print_r($_COOKIE);
echo '</pre>';
array {
[pdsessid] => "vom System generierte microtime()"
[webloginsession] => 1580598675 "(timestamp)"
}
...und was dieses:
echo session_id();
weißer Bildschirm
tja, ohne informationen gibts auch keine antwort :)
Bitte habt Verständnis für Fahranfänger ;) Ich tue doch mein bestes
Wie auch immer, Du kannst Deinen Code schon einmal stark lesbarer machen (und den skript ablauf beschleunigen!), indem Du die ersten 4 Reihen mit den folgenden erstzt:
$result = mysql_query("SELECT * FROM user,user_details WHERE user.sessid='".session_id()."' AND user.uid = user_details.uid LIMIT 1");
$sdata = mysql_fetch_assoc($result);Danach kannst Du im weiteren Skript ueber die Datenbankfeldnamen auf das array zugreifen, z.B. $sdata['uid'] anstelle von $sdata[0] und Du hast nur noch ein array anstelle von 2. Du kannst Dir auch alle die uebrigen Queries sparen, indem Du das gleiche mit den Tabellennamen dort in der ersten Query machst (... AND user.uid = user_musik.uid AND user.uid = user_interessen.uid ...). Dann solltest Du aber sicher sein, dass auch wirklich alle tabellen einen datensatz fuer eben diesen benutzer enthalten.
Hui, alles nach dem anderen, ich bin stolz auf mich dass ich es sohinbekommen habe...
Gruss Jan
echo '<pre>';
print_r($_COOKIE);
echo '</pre>';array {
[pdsessid] => "vom System generierte microtime()"
[webloginsession] => 1580598675 "(timestamp)"
}
Na, das sieht doch schon mal viel durchsichtiger aus!
Schreib Deine Query wie folgt:
$qid = mysql_query("SELECT * FROM user WHERE sessid='".$_COOKIE['webloginsession']."'");
dabei gehe ich aber nun wirklich davon aus, dass webloginsession die id ist, Die Du haben moechtest - denn WIE Du das Cookie speicherst, hast du ja immer noch nicht geschrieben... und genau dort war ja eigentlich von anfang an der punkt, wo Du haettest suchen muessen. Falls das "(timestamp)" keine Bemerkung von Dir ist, sondern ebenfalls im Cookie gespeichert ist, musst Du die id davor zuerst extrahieren, bevor Du damit arbeitest.
Bitte habt Verständnis für Fahranfänger ;) Ich tue doch mein bestes
Klar, bin ja auch kein Schumacher :)
Gruesse,
Lynky
Hi Lynky,
Na, das sieht doch schon mal viel durchsichtiger aus!
Schreib Deine Query wie folgt:
$qid = mysql_query("SELECT * FROM user WHERE sessid='".$_COOKIE['webloginsession']."'");
nun, hier kann ich nichts herausbekommen, weil die sessid ja diese vom Sytem generierte microtime() ist, diese steht da drin und das ist wei du wahrscheinlich weisst ein Wirr-warr aus Buchstaben und Zahlen.
dabei gehe ich aber nun wirklich davon aus, dass webloginsession die id ist, Die Du haben moechtest - denn WIE Du das Cookie speicherst, hast du ja immer noch nicht geschrieben...
$sessid = base64_encode(microtime());
$zeit = time();
mysql_query("UPDATE user SET sessid='$sessid', stime='$zeit' WHERE user='$_POST[user]'");
setcookie("pdsessid", $sessid, $zeit+(3600*24*7),"/");
und genau dort war ja eigentlich von anfang an der punkt, wo Du haettest suchen muessen. Falls das "(timestamp)" keine Bemerkung von Dir ist,
war ne Bemerkung da ich dachte dies wäre der timestamp gewesen, war aber wohl nicht so...
Bitte habt Verständnis für Fahranfänger ;) Ich tue doch mein bestes
Klar, bin ja auch kein Schumacher :)
Wenn du Ralf bist passt das schon ;)
Gruß Jan
noch ein versuch:
$qid = mysql_query("SELECT * FROM user WHERE sessid='".$_COOKIE['pdsessid']."'");
Warum du das aber aus meinem letzten posting nicht herausarbeiten konntest, das weiss ich auch nicht...
Lynky
Hi Lynky,
$qid = mysql_query("SELECT * FROM user WHERE sessid='".$_COOKIE['pdsessid']."'");
Hatten wir doch schon gestern ausprobiert, da liefen 2 Profile direkt übereinander...
Warum du das aber aus meinem letzten posting nicht herausarbeiten konntest, das weiss ich auch nicht...
Hmm, weil ich es schon so versucht hatte bevor du es mir gesagt hast, aber egal, jetzt geht es ich habe mit Sicherheit etwas falsch gemacht.
Vielen Dank dir Lynky!
Jan
Hi Jan,
Hatten wir doch schon gestern ausprobiert
nein, wir hatten $_COOKIE['webloginsession'] und nicht $_COOKIE['pdsessid']
jetzt geht es
prima!
Gruesse,
Lynky
Hallo Jan,
array {
[pdsessid] => "vom System generierte microtime()"
das ist imho keine besonders gute Idee. Sessionids die mit microtime() generiert sind, lassen sich durch ausprobieren recht gut finden und so kann der Angreifer fremde Sessions übernehmen. Warum verwendest du nicht die in php eingebaute Sessionfunktion?
[webloginsession] => 1580598675 "(timestamp)"
Die Zeit des Einlogens gehört - sofern sicherheitsrelevante Funktionen dahinterhängen - nicht in ein Cookie, sondern serverseitig in die Sessiondaten.
Grüße aus Nürnberg
Tobias
Hallo Tobias,
Warum verwendest du nicht die in php eingebaute Sessionfunktion?
Weil ich gerade in einer Lernphase bin und ich nur dass erarbeiten kann was mein schlaues Lehrbuch mir erkärt...
[webloginsession] => 1580598675 "(timestamp)"
(timestamp) steht nur aus dem Grunde da, weil ich dachte es wäre bei [webloginsession] der Timestamp angegeben, dem war aber nicht so, das "(timestamp)" gehört da gar nicht hin...
Gruß Jan
Hallo Jan,
Weil ich gerade in einer Lernphase bin und ich nur dass erarbeiten kann was mein schlaues Lehrbuch mir erkärt...
ob Dein Lehrbuch schlau ist, mag ich nicht zu beurteilen. Es ist jedoch definitiv veraltet, da es noch auf HTTP_COOKIE_VARS zurückgreift, die bereits seit Jahren veraltet sind, siehe z.B. im PHP-Handbuch.
Solche Bücher enthalten in vielen Fällen sehr bedenklichen Quellcode, so dass es besser sein kann, auf diese zu verzichten. Ich persönlich bin mit "Programming PHP" von Rasmus Lerdorf, dem Erfinder von PHP, gut gefahren. Natürlich geht dieses Buch noch nicht auf die tollen neuen Features von PHP 5 ein, das ja inzwischen auch schon einige Zeit veröffentlicht ist und auf immer mehr Servern zu finden ist.
Freundliche Grüße
Vinzenz
Hallo Jan,
$sdata = mysql_fetch_array(mysql_query("SELECT * FROM user_details WHERE uid='$data[0]'"));
das ist so ziemlich das falscheste was man machen kann. So hast du keinerlei Chance dir Fehler ausgeben zu lassen - mach es besser so:
$query = "SELECT * FROM user_details WHERE uid='".$data[0]."'";
$rs = mysql_query($query) or die('Fehler: '.mysql_error());
$sdata = mysql_fetch_row($rs) or die('Fehler: '.mysql_error());
Außerdem solltest du statt "SELECT *" die einzelnen Spalten die du benötigst reinschreiben und wenn du statt mysql_fetch_row mysql_fetch_assoc verwendest, kannst du die Spalten mit ihrem Namen ansprechen, was den Code etwas besser lesbar macht (du verwendest im Moment zwar mysql_fetch_array, aber mysql_fetch_row macht das gleiche).
[viel Code gelöscht]
beschränkt dich beim Posten von Code bitte auf den relevanten Teil.
Grüße aus Nürnberg
Tobias