Avatar billede baronen20 Nybegynder
20. februar 2003 - 10:37 Der er 32 kommentarer og
1 løsning

Problemer med cookies og login

Jeg kan ikke få cookies til at virke på min homepage.
Jeg prøver at lave et autologon script ved brug af cookies, men det virker ikke. Brugeren skal kunne vælge om han/hun skal logges ind automatisk eller ej.
Her er scriptet:

<--- default.php --->

<form action="login.php" method="post">
Nick:<br><input type="text" name="nick"><br>
Pass:<br><input type="password" name="pass"><br>
Husk mig:<input type="checkbox" name="auto_logon" value="ja"><br>
<input name="login" type="submit" value=" ok ">

<--- login.php --->
$query = mysql_query("SELECT * FROM team WHERE nick='$_POST[nick]' AND pass='$_POST[pass]'");
$row = mysql_fetch_array($query);
if ($_POST[auto_logon] == "ja") {
setcookie("logget_ind","ja", time()+3600);
setcookie("brugerid","$row[id]", time()+3600);
setcookie("brugernavn","$row[nick]", time()+3600);
} else {
session_register("logget_ind");
session_register("brugerid");
session_register("brugernavn");
$logget_ind = "ja";
$brugerid = $row[id];
$brugernavn = $row[nick];
}
header("Location:$current_page");
Avatar billede ohmish Nybegynder
20. februar 2003 - 10:40 #1
hvilke fejl får du?
Avatar billede ztyxx Nybegynder
20. februar 2003 - 10:41 #2
du mangler at checke om cookien for autologon er sat, er den ikke det, kan man jo ikke logge på automatisk :-)
Avatar billede ohmish Nybegynder
20. februar 2003 - 10:42 #3
du må ikke ha nogen form for output til browseren før en setcookie eller header. sæt f.eks hele phpdelen med login osv. øverst på siden.
Avatar billede ohmish Nybegynder
20. februar 2003 - 10:44 #4
ztyxx> det er da lidt sort det du siger der..
Avatar billede ohmish Nybegynder
20. februar 2003 - 10:45 #5
og det jeg selv sagde var også sort.. ser først nu at der er 2 seperate sider. doh.
Avatar billede baronen20 Nybegynder
20. februar 2003 - 10:59 #6
Jeg er ikke helt med?
Avatar billede ohmish Nybegynder
20. februar 2003 - 11:00 #7
du har ret ztyxx, sorry :)

baronen> sæt det her ind før header("Location:$current_page"); :

$check = mysql_query("SELECT brugerid FROM team WHERE brugerid='brugerid' AND brugernavn='$_COOKIE[\'brugernavn\']' "); if ($check)
{ header("Location:$current_page"); } else { header ("Location:default.php"); }

eller det her:

if (brugerid] && brugernavn) {
header("Location:$current_page");
} else { header ("Location:default.php"); }

er der ikke vrøvl med nick/brugerid/brugernavn. altså, hva bruger du?
Avatar billede ohmish Nybegynder
20. februar 2003 - 11:04 #8
hmmm, jeg er træt. ret det jeg sagde til:

$check = mysql_query("SELECT * FROM team WHERE id='brugerid' AND nick='brugernavn' "); if ($check)
{ header("Location:$current_page"); } else { header ("Location:default.php"); }

eller det her:

if (brugerid && brugernavn) {
header("Location:$current_page");
} else { header ("Location:default.php"); }
Avatar billede ohmish Nybegynder
20. februar 2003 - 11:08 #9
"$current_page" ska så være en anden side en den der checker cookien.

du ka også sige:

$check = mysql_query("SELECT * FROM team WHERE id='brugerid' AND nick='brugernavn' "); if ($check)
{ header("Location:LOGINDSIDEN.php"); } else { include ("default.php"); }

eller det her:

if (brugerid && brugernavn) {
header("Location:LOGINDSIDEN.php");
} else { include ("default.php"); }

så sku det være nok.
Avatar billede baronen20 Nybegynder
20. februar 2003 - 11:11 #10
Hvornår skal jeg så sætte cookies?

Fik jeg nævnt at det virker fint med sessions?
Avatar billede baronen20 Nybegynder
20. februar 2003 - 11:12 #11
ok, jeg prøver lige at lege lidt med det
Avatar billede baronen20 Nybegynder
20. februar 2003 - 11:15 #12
hvad skal der stå på LOGINDSIDEN.php???
Avatar billede ohmish Nybegynder
20. februar 2003 - 11:30 #13
der ska stå hva du end lyster, til dem der ER logget ind.
Avatar billede baronen20 Nybegynder
20. februar 2003 - 11:34 #14
dvs. i princippet kan man bare skrive logindsiden.php i adressen, så kommer man ind på siden?

Jeg skal bare have muligheden for at lave cookies på min side, så folk bliver logget ind automatisk. Jeg kan ikke se hvor du er på vej hen med det der...
Avatar billede ohmish Nybegynder
20. februar 2003 - 11:43 #15
jeg er ved at lave noget til dig der virker.. øjeblik. rør ikke noget
Avatar billede ohmish Nybegynder
20. februar 2003 - 12:18 #16
sessions er fint, når brugeren er inde.. men du ska bruge cookies til at genkende brugeren, når han kommer tilbage til siden.
det samlede script kunne se således ud (har byttet om på default og login og tilføjet "lidt"):


på alle "hemlige sider ska du bare sætte det her i toppen":
include ("conn.php");
$check = mysql_query("SELECT * FROM team WHERE nick='$brugernavn' AND pass='$pass'"); if (!$check)
{ echo "Denne side kan kun ses hvis du er logget og det er du ikke, buhu.<br><a href=\"default.php\">Log ind</a>""; }








<--- conn.php --->
@mysql_connect(localhost, DBlogin, DBpass) or die (databasefejl);
mysql_select_db(DBnavn) or die ($fejl);



<--- default.php --->
include ("conn.php");
$query = mysql_query("SELECT * FROM team WHERE id='brugerid' AND nick='brugernavn' ");
$row = mysql_fetch_array($query);
if ($query) {
echo "Du er logget ind som $row[nick]";
} else { ?>
Du er ikke logget ind. LOG IND:<br><br>
<form action="login.php" method="post">
Nick:<br><input type="text" name="nick"><br>
Pass:<br><input type="password" name="pass"><br>
Husk mig:<input type="checkbox" name="auto_logon" value="ja"><br>
<input name="login" type="submit" value=" ok ">
<? } ?>



<--- login.php --->
include ("conn.php");
$check = mysql_query("SELECT * FROM team WHERE nick='$_POST[nick]' AND pass='$_POST[pass]'");
$row = mysql_fetch_array($check);
if ($check) {
if ($_POST[auto_logon] == "ja") {
setcookie("logget_ind","ja", time()+3600);
setcookie("brugerid","$row[id]", time()+3600);
setcookie("brugernavn","$row[nick]", time()+3600);
} else {
$logget_ind = "ja";
$brugerid = $row[id];
$brugernavn = $row[nick];
session_register("logget_ind");
session_register("brugerid");
session_register("brugernavn");
session_register("pass");
} header ("logok.php"); }
else {
setcookie("logget_ind","");
setcookie("brugerid","");
setcookie("brugernavn","");
setcookie("pass","");
echo "Ugyldigt nick/pass! <a href=\"default.php\">Tilbage</a>"; }



<--- logok.php --->
include ("conn.php");
$check = mysql_query("SELECT * FROM team WHERE nick='$brugernavn' AND pass='$pass'"); if (!$check)
{ echo "Denne side kan kun ses hvis du er logget og det er du ikke, buhu.<br><a href=\"default.php\">Log ind</a>""; }
?>
her er alt det indhold der kun vises hvis du er logget ind...
Avatar billede ohmish Nybegynder
20. februar 2003 - 12:19 #17
hov.. har IKKE byttet om på default og login. det var noget jeg skrev før jeg byttede tilbage igen.. hehe.
Avatar billede ohmish Nybegynder
20. februar 2003 - 12:21 #18
og træt som jeg er lavede jeg en fejl:

på alle "hemlige" sider ska du bare sætte det her i toppen:
include ("conn.php");
$check = mysql_query("SELECT * FROM team WHERE nick='$brugernavn' AND pass='$pass'"); if (!$check)
{ echo "Denne side kan kun ses hvis du er logget og det er du ikke, buhu.<br><a href=\"default.php\">Log ind</a>"; exit; }

SÅDAN!
Avatar billede ohmish Nybegynder
20. februar 2003 - 12:21 #19
håber du fatter noget af det. ellers spørg :)
Avatar billede ohmish Nybegynder
20. februar 2003 - 12:26 #20
UTROLIGT jeg laver så mange fejl i dag!
HER er det du ska bruge:

på alle "hemlige sider" ska du bare sætte det her i toppen:
include ("conn.php");
$check = mysql_query("SELECT * FROM team WHERE nick='$brugernavn' AND pass='$pass'"); if (!$check)
{ echo "Denne side kan kun ses hvis du er logget og det er du ikke, buhu.<br><a href=\"default.php\">Log ind</a>"; exit; }








<--- conn.php --->
@mysql_connect(localhost, DBlogin, DBpass) or die ("databasefejl");
mysql_select_db(DBnavn) or die ("databasefejl");



<--- default.php --->
include ("conn.php");
$query = mysql_query("SELECT * FROM team WHERE id='brugerid' AND nick='brugernavn' ");
$row = mysql_fetch_array($query);
if ($query) {
echo "Du er logget ind som $row[nick]";
} else { ?>
Du er ikke logget ind. LOG IND:<br><br>
<form action="login.php" method="post">
Nick:<br><input type="text" name="nick"><br>
Pass:<br><input type="password" name="pass"><br>
Husk mig:<input type="checkbox" name="auto_logon" value="ja"><br>
<input name="login" type="submit" value=" ok ">
<? } ?>



<--- login.php --->
include ("conn.php");
$check = mysql_query("SELECT * FROM team WHERE nick='$_POST[nick]' AND pass='$_POST[pass]'");
$row = mysql_fetch_array($check);
if ($check) {
if ($_POST[auto_logon] == "ja") {
setcookie("logget_ind","ja", time()+3600);
setcookie("brugerid","$row[id]", time()+3600);
setcookie("brugernavn","$row[nick]", time()+3600);
} else {
$logget_ind = "ja";
$brugerid = $row[id];
$brugernavn = $row[nick];
session_register("logget_ind");
session_register("brugerid");
session_register("brugernavn");
session_register("pass");
} header ("logok.php"); }
else {
setcookie("logget_ind","");
setcookie("brugerid","");
setcookie("brugernavn","");
setcookie("pass","");
echo "Ugyldigt nick/pass! <a href=\"default.php\">Tilbage</a>"; }



<--- logok.php --->
include ("conn.php");
$check = mysql_query("SELECT * FROM team WHERE nick='$brugernavn' AND pass='$pass'"); if (!$check)
{ echo "Denne side kan kun ses hvis du er logget og det er du ikke, buhu.<br><a href=\"default.php\">Log ind</a>"; }
?>
her er alt det indhold der kun vises hvis du er logget ind...
Avatar billede ohmish Nybegynder
20. februar 2003 - 12:28 #21
ret default.php til:

include ("conn.php");
$query = mysql_query("SELECT * FROM team WHERE id='$brugerid' AND nick='$brugernavn' ");
$row = mysql_fetch_array($query);
if ($query) {
echo "Du er logget ind som ".$row[nick];
} else { ?>
Du er ikke logget ind. LOG IND:<br><br>
<form action="login.php" method="post">
Nick:<br><input type="text" name="nick"><br>
Pass:<br><input type="password" name="pass"><br>
Husk mig:<input type="checkbox" name="auto_logon" value="ja"><br>
<input name="login" type="submit" value=" ok ">
<? } ?>
Avatar billede ohmish Nybegynder
20. februar 2003 - 12:29 #22
jeg vil vædde min farmor på at det spiller nu, hvis du gør som jeg har skrevet sidst.
Avatar billede baronen20 Nybegynder
20. februar 2003 - 13:54 #23
Det virker faktisk fint nok det du har skrevet.

Der er dog noget sært alligevel, for det virker godt nok når jeg kører det LOKALT, men når jeg uploader det til webhotellet og kører det dér, så virker cookies ikke!?

Det er meget mærkligt, da det er nøjagtig den samme kode...
Avatar billede baronen20 Nybegynder
20. februar 2003 - 14:14 #24
siden det nu virker lokalt, så får du point :)
Avatar billede ohmish Nybegynder
20. februar 2003 - 14:34 #25
hmm.. prøv at poste hver enkelt sides indhold her.
Avatar billede ohmish Nybegynder
20. februar 2003 - 14:37 #26
med lokalt, mener du så din egen server? den ska ha samme indstilling som på webhotellet (phpinfo). måske er globals sat til off eller noget?
Avatar billede ohmish Nybegynder
20. februar 2003 - 14:38 #27
og generelt på eksperten.dk: husk at fortælle fejlen når du siger "virker ikke".
Avatar billede baronen20 Nybegynder
20. februar 2003 - 15:23 #28
okay... her er min login.php:

<?
include("connect.php");

$check = mysql_query("SELECT * FROM team WHERE nick='$_POST[nick]' AND pass='$_POST[pass]'");
$row = mysql_fetch_array($check);

if (mysql_num_rows($check) != 0) {

if ($row[aktiveret] != "nej") {

if ($_POST[auto_logon] == "ja") {
    setcookie("logget_ind","ja",time()+3600);
    setcookie("brugerid","$row[id]",time()+3600);
    setcookie("brugernavn","$row[nick]",time()+3600);
    setcookie("password","$row[pass]",time()+3600);
    setcookie("adminlevel","$row[level]",time()+3600);
    setcookie("signatur","$row[option_medtag_signatur]",time()+3600);
    }else{
    setcookie("logget_ind","ja");
    setcookie("brugerid","$row[id]");
    setcookie("brugernavn","$row[nick]");
    setcookie("password","$row[pass]");
    setcookie("adminlevel","$row[level]");
    setcookie("signatur","$row[option_medtag_signatur]");
    }
header("Location:$current_page");
} else {
header("Location:$current_page&error=confirmation");
}

} else {

setcookie("logget_ind","");
setcookie("brugerid","");
setcookie("brugernavn","");
setcookie("password","");
setcookie("adminlevel","");
setcookie("signatur","");

$query = mysql_query("SELECT * FROM team");
$row = mysql_fetch_array($query);
    if ($_POST[nick] != $row[nick]) {
    header("Location:$current_page&error=nick");
    } else {
        if ($_POST[pass] != $row[pass]) {
        header("Location:$current_page&error=pass");
        }
    }
}
?>


Den virker korrekt på min egen "server" (Windows XP med IIS 5.1, PHP 4.3.0 og mySQL 3.23.55), men på webhotellet bliver alt andet end "setcookie..." delen udført korrekt.
Hvis jeg bruger sessions istedet, så er der ingen problemer.

register_globals er sat til ON begge steder

Der er ingen fejlmeddelelser eller noget. Når jeg kører den online, bliver cookies ganske enkelt ikke sat.
Avatar billede baronen20 Nybegynder
20. februar 2003 - 15:44 #29
www.klan-ged.dk

Prøv at stemme på siden... Det eneste jeg har gjort er, at skifte

session("harstemt") == "ja";

ud med:

setcookie("harstemt","ja");
Avatar billede ohmish Nybegynder
20. februar 2003 - 15:58 #30
prøv at køre denne test fra en ellers tom side:

<?
setcookie("test", "check");
setcookie("tidstest", "check", time()+9999999);
if ($_COOKIE['test']!="") { echo "Cookiekald=".$_COOKIE['test']." (ok)<br>"; } else { echo "Cookiekald=fejl<br>"; }
if ($test!="") { echo "Værdikald=$test (ok)<br>"; } else {
echo "Værdikald=fejl<br>"; }

if ($_COOKIE['tidstest']!="") { echo "Cookiekald2=".$_COOKIE['tidstest']." (ok)<br>"; } else { echo "Cookiekald2=fejl<br>"; }
if ($tidstest!="") { echo "Værdikald2=$tidstest (ok)<br>"; } else {
echo "Værdikald2=fejl<br>"; }
?>
Avatar billede ohmish Nybegynder
20. februar 2003 - 16:03 #31
har du messenger eller lign?
Avatar billede ohmish Nybegynder
20. februar 2003 - 16:05 #32
jeg ka ikke lige se hva der sker når jeg stemmer. men den fjerner ikke muligheden for at stemme flere gange.
Avatar billede baronen20 Nybegynder
20. februar 2003 - 16:48 #33
ICQ: 116149876
MSN: b4r0n3n@hotmail.com
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