Avatar billede proff Nybegynder
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
Avatar billede editone Nybegynder
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);
Avatar billede olebole Juniormester
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>
Avatar billede proff Nybegynder
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>
Avatar billede editone Nybegynder
04. december 2004 - 01:54 #4
smid ob_start(); i toppen af koden
Avatar billede olebole Juniormester
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
Avatar billede olebole Juniormester
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
Avatar billede editone Nybegynder
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.
Avatar billede olebole Juniormester
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)
Avatar billede proff Nybegynder
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?
Avatar billede editone Nybegynder
04. december 2004 - 13:52 #10
det er så godt nok ob_start(); :D men jeg poster lige et svar..

mvh editone - editone.dk
Avatar billede olebole Juniormester
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'.
Avatar billede editone Nybegynder
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
Avatar billede proff Nybegynder
04. december 2004 - 14:46 #13
Gider du vise et eksempel? Faktisk forstår jeg det ikke
Avatar billede editone Nybegynder
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
Avatar billede proff Nybegynder
04. december 2004 - 15:28 #15
Det var nu olebole's eksempel jeg hentydede til :)
Avatar billede editone Nybegynder
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
Avatar billede olebole Juniormester
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>
Avatar billede olebole Juniormester
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");
Avatar billede proff Nybegynder
08. april 2007 - 13:33 #19
Lukning forsinket en årrække .-)
Avatar billede editone Nybegynder
08. april 2007 - 13:46 #20
haha 3 år :P nice going....
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester