Gå til innhold

Får ikke satt cookie


Anbefalte innlegg

Søkte litt, men fant ikke noe som kan hjelpe meg med akkurat dette problemet. Kan kanskje være en småfeil jeg har gjort også da.

 

<?php
include('connect.php');

$brukernavn = $_POST['brukernavn'];
$passord = $_POST['passord'];

$query = "SELECT brukernavn, passord FROM brukere WHERE brukernavn = '$brukernavn' && passord = '$passord'";
$result = mysql_query($query);

if(mysql_num_rows($result) != 0)
{
  setcookie("loggedin", $brukernavn, time()+20);
  $loggedin = $_COOKIE['loggedin'];
  echo "<b>". $loggedin. "</b>";

  print_r($_COOKIE);
}

else
{
  echo "Feil brukernavn og/eller passord. <a href='../index.php'>Prøv på nytt</a>";
}

?>

 

Cookie'en blir ikke satt av en eller annen grunn (derfor print_r($_COOKIE) ).

 

Noen som har en løsning :)

Lenke til kommentar
Videoannonse
Annonse

Hei,

det virker som du gjør en vanlig feil - faktisk så vanlig at den står nevn i manualen:

 

Common Pitfalls:

 


  •  
  • Cookies will not become visible until the next loading of a page that the cookie should be visible for. To test if a cookie was successfully set, check for the cookie on a next loading page before the cookie expires. Expire time is set via the expire parameter. A nice way to debug the existence of cookies is by simply calling print_r($_COOKIE);.
     

Lenke til kommentar

Visste det faktisk, har ikke testa det særlig enda da.

 

Mekka en test.php fil og la inn dette:

<?php

$loggedin = $_COOKIE("loggedin");
echo "<b>".$loggedin."</b>";

?>

 

Fatal error: Call to undefined function: array() on line 3 får jeg da.

Det er jo echo "<b>".$loggedin."</b>";

 

Prøvde med bare echo $loggedin også... fean, er en stund siden jeg har drevet noe særlig med php... må brushe opp skillsa :)

 

Menmen, har du et svar på det også eller? :)

Lenke til kommentar

vel, feilmeldinga gikk vekk, men den printer ingenting.

 

Virker som om cookien ikke blir satt, eller at den ikke har noe verdi. Derfor jeg har print_r($_COOKIE); på den første for å sjekke.

 

men jeg har prøvd med bare ren tekst også istedenfor en variabel, men funka ikke det heller... rart det her.

Lenke til kommentar

checklogin ser forøvrig nå ut:

<?php
include('connect.php');

$brukernavn = $_POST['brukernavn'];
$passord = $_POST['passord'];

$query = "SELECT brukernavn, passord FROM brukere WHERE brukernavn = '$brukernavn' && passord = '$passord'";
$result = mysql_query($query);

if(mysql_num_rows($result) != 0)
{
  setcookie('loggedin', 'joda', time()+60, '/');
  $loggedin = $_COOKIE['loggedin'];
  echo "<b>". $loggedin. "</b>";

  print_r($_COOKIE);
  echo "<br /><a href='test.php'>Test</a>";
}

else
{
  echo "Feil brukernavn og/eller passord. <a href='../index.php'>Prøv på nytt</a>";
}

?>

 

og test.php i samme mappe:

<?php

$loggedin = $_COOKIE['loggedin'];
echo '<b>'.$loggedin.'</b>';

?>

 

EDIT:

Og det funker fremdeles ikke, så alle tips og mulige triks vil bli prøvd :)

Endret av kimla
Lenke til kommentar

Hva er det du driver og soser med?

 

  setcookie('loggedin', 'joda', time()+60, '/');
 $loggedin = $_COOKIE['loggedin'];
 echo "<b>". $loggedin. "</b>";

Denne kodesnutten vil sende en Cookie-header til nettleseren på linje 1, vil sette $loggedin til NULL på linje 2 ($_COOKIE['loggedin'] eksisterer ikke mer selv om du har sendt et kall til setcookie - $_COOKIE blir først populert når nettleseren sender en Cookie-header tilbake til serveren, altså ved neste sidelasting), og på linje 3 så printes ikke $loggedin ganske enkelt fordi den ikke har noen verdi.

 

Prøv dette isteden?

  setcookie('loggedin', 'joda', time()+60, '/');
 $loggedin = 'joda';
 echo "<b>". $loggedin. "</b>";

 

Der 'joda' egentlig skal være brukernavnvariabelen eller hva det skal være.

Lenke til kommentar

Okay, jeg prøvde noe nytt.. :)

 

checklogin.php:

<?php
include('connect.php');

$brukernavn = $_POST['brukernavn'];
$passord = $_POST['passord'];

$query = "SELECT brukernavn, passord FROM brukere WHERE brukernavn = '$brukernavn' && passord = '$passord'";
$result = mysql_query($query);

if(mysql_num_rows($result) != 0)
{
  setcookie('loggedin', $brukernavn, time()+60, '/');
  echo "<a href='test.php'>test</a>";
}

else
{
  echo "Du skrev inn feil brukernavn og/eller passord. <a href='../index.php'>Prøv igjen</a>";
}

?>

 

test.php:

<?php

$loggedin = $_COOKIE['loggedin'];
echo '<b>'.$loggedin.'</b>';

?>

 

Etter det jeg har fått med meg av forklaringen din (hvis jeg har fått med meg alt riktig da) er at nå vil:

1: cookie'n bli satt med brukernavnet som value.

2: jeg setter ikke cookie'n til NULL siden jeg ikke "roter" mer med den ;)

3: jeg linker til en side (i samme mappe på serveren) som skal hente cookie'n og skrive ut verdien.

 

Kanskje det bare er meg som er treig (noe det sannsynligvis er), men det vil fremdeles ikke printe ut noe på test.php =/

 

Noe bra svar som er forståelig på det eller? :)

 

Takk for svar forresten :)

Lenke til kommentar
Husker du å kjøre test.php mindre enn 60 sekunder etter at du har kjørt checklogin.php? Vet du at cookien blir satt (du får opp linken "test")?

kjører test.php med en gang.

Er mulig cookien blir satt, men den har hvertfall ikke value.

 

endret test.php til:

<?php

$loggedin = $_COOKIE['loggedin'];
echo '<b>'.$loggedin.'</b>';

echo $_COOKIE["loggedin"];
echo $HTTP_COOKIE_VARS["loggedin"];


print_r($_COOKIE);

?>

 

Da er det bare Array ( ) som blir printet (altså pga. print_r($_COOKIE) ).

 

Og ja, får opp linken test.

 

Men skulle gjerne hatt en feilmelding, men det kommer jo heller ikke.

Prøver litt til jeg.

 

Fritt for alle å slenge inn tanker og muligheter for å fikse dette :)

Lenke til kommentar

når jeg prøver:

<?php

if(isset($_COOKIE['loggedin']) )
{
echo $_COOKIE["loggedin"];
echo $HTTP_COOKIE_VARS["loggedin"];

$loggedin = $_COOKIE['loggedin'];
echo '<b>'.$loggedin.'</b>';

print_r($_COOKIE);

}

else
{
  echo "Cookie er ikke satt.";
}
?>

 

får jeg opp "Cookie er ikke satt.".

Må jo være noe jeg gjør feil i checklogin.php da vel...

Lenke til kommentar
Noen spessiell grund til at du ikke bruker en session?

 

Sikker på at cookie'n skal legges på root("/")?

Tror jeg ville satt noe mer enn +60 også som Toget nevnte...

Begynner faktisk å lure på om jeg skal bruke session istedenfor faktisk.

Eneste grunnen til at jeg bruker cookie er at jeg har brukt det før, og det er enkelt å bruke, er vel egentlig et spørsmål om gidd :)

 

Det at den er +60 er jo bare for å teste, samme grunnen til at jeg har den på "root", da skal den jo funke overalt, så da er ikke det problemet liksom :)

Lenke til kommentar
Prøv denne: time()+604800

 

Det er for en uke. Hvis det ikke funker da, så har du ikke et annet valg enn å velge sessions:P

Kan prøve, men tviler på at det hjelper.

 

Har sjekka alle variabler nå, alt er det verdi i, det er selve cookien det er noe feil med... skjønner ikke helt det her.

 

Menmen, får vel prøve meg frem, hvis jeg ikke får det til så bruker jeg vel sessions... :)

Lenke til kommentar

Okay, hvorfor i HELVETE funka det?!?! :hmm: hehe.

 

Ikke at jeg skal klage for at det funker, men syns det var litt rart at det funka når jeg satt at den skulle vare lengre... menmen, funker hvertfall.

 

Takk for all hjelp :)

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...