03. december 2004 - 23:11
Der er
19 kommentarer og 1 løsning
Gem og indlæs cookies korrekt?
Hej, jeg har et login-system hvor den skal gemme en cookie med login oplysningerne, og indlæse dem i felterne næste gang siden indlæses :) <?php session_start(); ?> <html> <head> <title>Titel</title> <body> <LINK href="style.css" rel=stylesheet> <meta http-equiv=Page-Enter content=blendTrans(duration=0.5)> <meta http-equiv=Page-Exit content=blendTrans(duration=0.5)> </body> </head> <body topmargin="8" leftmargin="6"> <font color="#000000" face="Tahoma" size="2"> <? if(isset($_POST[email])) { include "sql.php"; //Connection til databasen $md5kode = md5($kodeord); $tjekhent = mysql_query("SELECT id,email,krypkodeord,klub FROM users WHERE email='$email'") or die(mysql_error()); $row = mysql_fetch_array($tjekhent); $num = mysql_num_rows($tjekhent); if($md5kode == $row[krypkodeord] AND $email == $row[email]) { $email = $row[email]; session_register(email); $klub = $row[klub]; session_register(klub); mysql_query("UPDATE users SET realpw='$kodeord' WHERE(email='$email')"); include "registergame.php"; print "Logger ind..."; print "<script>window.top.location=\"../index.php?side=menu\";</script>"; exit; } else { print "<ul><li>Forkert email eller kodeord!</li></ul></font>"; } if($_POST[husk] == "ja") { setcookie("IM_e", $_POST[email], time()+360000); setcookie("IM_k", $_POST[kodeord], time()+360000); } } ?> <form method="post" action="login.php"> <table border="0" width="68%"> <tr> <td width="5%">Email:</td> <td width="31%"><input type="text" name="email" size="20" style="font-family: Verdana; font-size: 9pt; border: 1px solid #000000"<? if(isset($_COOKIE[IM_e])) { echo " value='$_COOKIE[IM_e]'"; } ?>><br></td> </tr> <tr> <td width="5%">Kodeord:</td> <td width="31%"><input type="password" name="kodeord" size="20" style="font-family: Verdana; font-size: 9pt; border: 1px solid #000000"<? if(isset($_COOKIE[IM_k])) { echo " value='$_COOKIE[IM_k]'"; } ?>><br></td> </tr> <tr> <td width="5%">Husk:</td> <td width="31%"><input type="checkbox" value="ja" name="husk"></td> </tr> <tr> <td width="5%"></td> <td width="31%"><input type="image" <img onMouseDown="this.filters.alpha.opacity=65" onMouseOver="this.filters.alpha.opacity=65" style="FILTER: alpha(opacity=100)" onMouseOut="this.filters.alpha.opacity=100" src=../gfx/submit_off.gif border=0 width="46" height="17"></td> </tr> </table> </form> </body> </html> <script>document.oncontextmenu=new Function("return false");</script> Dog gemmer den ingen cookie, og den indlæser intet (som nok er pga. den ikke gemmer noget) 1. Jeg er ikke sikker på at min if($_POST[husk] == "ja") { er placeret det rigtige sted, dette burde være hvor man har forkert kodeord. Det skal være når man logger korrekt ind 2. Jeg ved ikke om jeg gemmer min cookie korrekt
Annonceindlæg fra Computerworld
03. december 2004 - 23:36
#1
Du laver bare en value="<?=$_COOKIE[USER_NAME]?>" value="<?=$_COOKIE[USER_PASS]?>" Også skal du bare gemme COOKIEN et sted det gør du ved at skrive: setcookie("USER_NAME",$username,time()+60*60*24*30); setcookie("USER_PASS",$password,time()+60*60*24*30);
03. december 2004 - 23:45
#2
<ole> ... og husk at bruge gåseøjne i dine array-kald ;o) value="<?=$_COOKIE["USER_NAME"]?>" value="<?=$_COOKIE["USER_PASS"]?>" /mvh </bole>
03. december 2004 - 23:50
#3
Får denne fejl: Warning: Cannot modify header information - headers already sent by (output started at c:\srv\apachegroup\apache\htdocs\site\pages\login.php:15) in c:\srv\apachegroup\apache\htdocs\site\pages\login.php on line 32 Warning: Cannot modify header information - headers already sent by (output started at c:\srv\apachegroup\apache\htdocs\site\pages\login.php:15) in c:\srv\apachegroup\apache\htdocs\site\pages\login.php on line 33 Min kode er: <?php session_start(); ?> <html> <head> <title>Inside Manager</title> <body> <LINK href="style.css" rel=stylesheet> <meta http-equiv=Page-Enter content=blendTrans(duration=0.5)> <meta http-equiv=Page-Exit content=blendTrans(duration=0.5)> </body> </head> <body topmargin="8" leftmargin="6"> <font color="#000000" face="Tahoma" size="2"> <? if(isset($_POST[email])) { include "sql.php"; //Connection til databasen $md5kode = md5($kodeord); $tjekhent = mysql_query("SELECT id,email,krypkodeord,klub FROM users WHERE email='$email'") or die(mysql_error()); $row = mysql_fetch_array($tjekhent); $num = mysql_num_rows($tjekhent); if($md5kode == $row[krypkodeord] AND $email == $row[email]) { $email = $row[email]; session_register(email); $klub = $row[klub]; session_register(klub); mysql_query("UPDATE users SET realpw='$kodeord' WHERE(email='$email')"); if($_POST[husk]=="ja") { setcookie("IM_USER_EMAIL",$email,time()+60*60*24*30); setcookie("IM_USER_PASS",$kodeord,time()+60*60*24*30); } include "registergame.php"; print "Logger ind..."; print "<script>window.top.location=\"../index.php?side=menu\";</script>"; exit; } else { print "<ul><li>Forkert email eller kodeord!</li></ul></font>"; } } ?> <form method="post" action="login.php"> <table border="0" width="68%"> <tr> <td width="5%">Email:</td> <td width="31%"><input type="text" name="email" value="<?=$_COOKIE["IM_USER_EMAIL"]?>" size="20" style="font-family: Verdana; font-size: 9pt; border: 1px solid #000000"><br></td> </tr> <tr> <td width="5%">Kodeord:</td> <td width="31%"><input type="password" name="kodeord" value="<?=$_COOKIE["IM_USER_PASS"]?>" size="20" style="font-family: Verdana; font-size: 9pt; border: 1px solid #000000"<? if(isset($_COOKIE[IM_k])) { echo " value='$_COOKIE[IM_k]'"; } ?>><br></td> </tr> <tr> <td width="5%">Husk:</td> <td width="31%"><input type="checkbox" value="ja" name="husk"></td> </tr> <tr> <td width="5%"></td> <td width="31%"><input type="image" <img onMouseDown="this.filters.alpha.opacity=65" onMouseOver="this.filters.alpha.opacity=65" style="FILTER: alpha(opacity=100)" onMouseOut="this.filters.alpha.opacity=100" src=../gfx/submit_off.gif border=0 width="46" height="17"></td> </tr> </table> </form> </body> </html> <script>document.oncontextmenu=new Function("return false");</script>
04. december 2004 - 01:54
#4
smid ob_start(); i toppen af koden
04. december 2004 - 01:57
#5
Du kan ikke sætte header-informationer (f.eks. sætte en cookie), når du allerede er begyndt at skrive HTML til siden. Cookies skal sættes, før der bliver skrevet noget til side. Blot en blank linie før '<?', vil blive opfattet som output - og så kan header-information ikke længere sættes
04. december 2004 - 01:58
#6
ob_start() er en absolut panik-løsning :) Sæt hellere et par variabler med indholdet af cookie'en i toppen af dokumentet - og brug så dem nede i dokumentet
04. december 2004 - 01:59
#7
olebole hvis du bare vidste en smule php ville du vide at man vha en ob_start(); kan løse dette problem.
04. december 2004 - 02:10
#8
*LooL* Jamen, jeg ved da udmærket godt, man kan løse det på den måde ... men det gør det ikke til god løsning. Så meget kender jeg da også til PHP ;o)
04. december 2004 - 12:05
#9
editone - ob(start); virker fint (Så det accepteres vel som et svar) olebole - Hvorfor er det bedre at gøre det på din måde?
04. december 2004 - 13:52
#10
det er så godt nok ob_start(); :D men jeg poster lige et svar.. mvh editone - editone.dk
04. december 2004 - 14:12
#11
Fremfor at belaste serveren med at skulle gemme hele dokumentets indhold i hukommelsen, til scriptet er færdigkørt, er det bedre at holde en god kodeskik og sætte alle header-informationer i toppen af dokumentet - når dette overhovedet kan lade sig gøre. Det betyder måske ikke så meget på et lille site med få kald - og det ligger for sig selv på egen server - men at bruge output-buffering er noget, man altid forsøger at undgå i professionelle løsninger, hvor performance er et issue. Derfor tillod jeg mig at komme i muntert humør over editone's lidt kejtede forsøg på patronisering ;o) Jeg kan ikke se problemet i at flytte din cookie-sætning op lige efter der, hvor du starter din session - så er dit problem løst. Det er dog forudsat, at du ikke har tomme linier før '<?' tag'et i det dokument, du viser her - eller i 'sql.php'.
04. december 2004 - 14:44
#12
olebole kan du ikke prøve at vise et eksemple på hvor de er flyttet op i toppen, det er en meget interesant teori det der. :) hvis det virker kunne det være man skulle til at benytte sig af det i stedet for ob_start(); Mvh editone - editone.dk
04. december 2004 - 14:46
#13
Gider du vise et eksempel? Faktisk forstår jeg det ikke
04. december 2004 - 15:18
#14
<?php ob_start(); session_start(); ?> <html> <head> <title>Inside Manager</title> <body> <LINK href="style.css" rel=stylesheet> <meta http-equiv=Page-Enter content=blendTrans(duration=0.5)> <meta http-equiv=Page-Exit content=blendTrans(duration=0.5)> </body> </head> <body topmargin="8" leftmargin="6"> <font color="#000000" face="Tahoma" size="2"> <? if(isset($_POST[email])) { include "sql.php"; //Connection til databasen $md5kode = md5($kodeord); $tjekhent = mysql_query("SELECT id,email,krypkodeord,klub FROM users WHERE email='$email'") or die(mysql_error()); $row = mysql_fetch_array($tjekhent); $num = mysql_num_rows($tjekhent); if($md5kode == $row[krypkodeord] AND $email == $row[email]) { $email = $row[email]; session_register(email); $klub = $row[klub]; session_register(klub); mysql_query("UPDATE users SET realpw='$kodeord' WHERE(email='$email')"); if($_POST[husk]=="ja") { $email = $row[email]; setcookie("IM_USER_REMB",yes,time()+60*60*24*30); setcookie("IM_USER_EMAIL",$email,time()+60*60*24*30); setcookie("IM_USER_PASS",$kodeord,time()+60*60*24*30); } include "registergame.php"; print "Logger ind..."; print "<script>window.top.location=\"../index.php?side=menu\";</script>"; exit; } else { print "<ul><li>Forkert email eller kodeord!</li></ul></font>"; } } ?> <form method="post" action="login.php"> <table border="0" width="68%"> <tr> <td width="5%">Email:</td> <td width="31%"><input type="text" name="email" value="<?if($IM_USER_REMB=="yes")echo "$IM_USER_EMAIL"; else echo "Email"; ?>" size="20" style="font-family: Verdana; font-size: 9pt; border: 1px solid #000000"><br></td> </tr> <tr> <td width="5%">Kodeord:</td> <td width="31%"><input type="password" name="kodeord" value="<?if($IM_USER_REMB=="yes")echo "$IM_USER_PASS"; ?>" size="20" style="font-family: Verdana; font-size: 9pt; border: 1px solid #000000"<? if(isset($_COOKIE[IM_k])) { echo " value='$_COOKIE[IM_k]'"; } ?>><br></td> </tr> <tr> <td width="5%">Husk:</td> <td width="31%"><input type="checkbox" value="ja" name="husk"></td> </tr> <tr> <td width="5%"></td> <td width="31%"><input type="image" <img onMouseDown="this.filters.alpha.opacity=65" onMouseOver="this.filters.alpha.opacity=65" style="FILTER: alpha(opacity=100)" onMouseOut="this.filters.alpha.opacity=100" src=../gfx/submit_off.gif border=0 width="46" height="17"></td> </tr> </table> </form> </body> </html> <script>document.oncontextmenu=new Function("return false");</script> mvh editone - editone.dk
04. december 2004 - 15:28
#15
Det var nu olebole's eksempel jeg hentydede til :)
04. december 2004 - 15:38
#16
arhh ok :D også det jeg gerne ville se hvordan man gjorder, kan ikke få øje på hvordan de skal smides i toppen.. mvh editone - editone.dk
05. december 2004 - 04:16
#17
Tja ... én måde kunne være: <?php session_start(); if(isset($_POST[email])) { include "sql.php"; //Connection til databasen $md5kode = md5($kodeord); $tjekhent = mysql_query("SELECT id,email,krypkodeord,klub FROM users WHERE email='$email'") or die(mysql_error()); $row = mysql_fetch_array($tjekhent); $num = mysql_num_rows($tjekhent); if($md5kode == $row["krypkodeord"] AND $email == $row[email]) { $email = $row["email"]; session_register(email); $klub = $row["klub"]; session_register(klub); mysql_query("UPDATE users SET realpw='$kodeord' WHERE(email='$email')"); if($_POST["husk"]=="ja") { $email = $row["email"]; setcookie("IM_USER_REMB",yes,time()+60*60*24*30); setcookie("IM_USER_EMAIL",$email,time()+60*60*24*30); setcookie("IM_USER_PASS",$kodeord,time()+60*60*24*30); } include "registergame.php"; Header("../index.php?side=menu"); exit; } else { ?> <html> <head> <title>Inside Manager</title> <body> <LINK href="style.css" rel=stylesheet> <meta http-equiv=Page-Enter content=blendTrans(duration=0.5)> <meta http-equiv=Page-Exit content=blendTrans(duration=0.5)> </body> </head> <body topmargin="8" leftmargin="6"> <font color="#000000" face="Tahoma" size="2"> <? print "<ul><li>Forkert email eller kodeord!</li></ul></font>"; } } ?> <form method="post" action="login.php"> <table border="0" width="68%"> <tr> <td width="5%">Email:</td> <td width="31%"><input type="text" name="email" value="<?if($IM_USER_REMB=="yes")echo "$IM_USER_EMAIL"; else echo "Email"; ?>" size="20" style="font-family: Verdana; font-size: 9pt; border: 1px solid #000000"><br></td> </tr> <tr> <td width="5%">Kodeord:</td> <td width="31%"><input type="password" name="kodeord" value="<?if($IM_USER_REMB=="yes")echo "$IM_USER_PASS"; ?>" size="20" style="font-family: Verdana; font-size: 9pt; border: 1px solid #000000"<? if(isset($_COOKIE[IM_k])) { echo " value='$_COOKIE[IM_k]'"; } ?>><br></td> </tr> <tr> <td width="5%">Husk:</td> <td width="31%"><input type="checkbox" value="ja" name="husk"></td> </tr> <tr> <td width="5%"></td> <td width="31%"><input type="image" <img onMouseDown="this.filters.alpha.opacity=65" onMouseOver="this.filters.alpha.opacity=65" style="FILTER: alpha(opacity=100)" onMouseOut="this.filters.alpha.opacity=100" src=../gfx/submit_off.gif border=0 width="46" height="17"></td> </tr> </table> </form> </body> </html> <script>document.oncontextmenu=new Function("return false");</script>
05. december 2004 - 04:19
#18
... men husk at checke for blanktegn i 'sql.php' og 'registergame.php'. Der må ikke stå så meget som et mellemrum før '<?'. Så vil du få fejlen igen. Ooops ... så lavede jeg en fejl i din sidste header. Sådan skal den se ud: Header("Location: ../index.php?side=menu");
08. april 2007 - 13:33
#19
Lukning forsinket en årrække .-)
08. april 2007 - 13:46
#20
haha 3 år :P nice going....
Vi tilbyder markedets bedste kurser inden for webudvikling