28. oktober 2011 - 17:02Der er
12 kommentarer og 1 løsning
Opdatering af cookie som indeholder et class-objekt
Hej!
Jeg arbejder pt på et simpelt projekt hvor jeg skal kunne tilføje nogle brugere og gemme deres oplysninger i en cookie. Jeg kan imidlertid ikke få det til at fungere. Den første bruger der tilføjes virker fint, men hvis tilføjer en mere går det galt (den nye bruger tilføjes ikke til cookie).
Kort fortalt går projektet ud på at hente information fra en RSS-feed og lave et score board over hvilken bruger der har satset bedst på nogle nfl kampe.
Jeg har følgende kode
include("functions.php"); //indeholder mine class' og nogle andre funktioner.
if( !isset($_SESSION["games"]) ){ startRSS(); }
$games = unserialize($_SESSION["games"]); // Info om kampe
// Herunder behandles info fra form $name = $_POST["name"];
Har jeg misforstået noget? Såvidt, jeg kan se, indeholder din cookie et array - ikke et objekt ... eller?
Synes godt om
Slettet bruger
28. oktober 2011 - 17:43#4
#3 Du har ret - min cookie indeholder et array af objekter (har en class der hedder user og mit users-array indeholder så alle brugerne).
#2 Håber dette er tydeligt
Uddrag af koden.
// Herunder leges der med cookies if(isset($_COOKIE["users"])){ $users = unserialize( $_COOKIE["users"] ); //Får et fuldt funktionelt array med et bruger-objekt.
$users[] = new User($name, $picks, $points); //To bruger-objekter i arrayet
$var = serialize($users); // En forfærdelig lang streng som er som den skal være. Virker hvis jeg gemmer den i en session i stedet.
setcookie("users", $var, time()+3600*24*5); } else { $users = array(); // Samme som ovenfor. $users[] = new User($name, $picks, $points); setcookie("users", serialize($users), time()+3600*24*5); }
På min index-side (der hvor resultaterne bliver vist) indeholder min cookie kun strengen fra mit bruger-array med ét bruger-objekt i. Med andre ord, så er det som om min cookie ikke bliver opdateret hvis der tilføjes mere end en bruger. Så "else"-delen ovenover virker, men "if"-delen virker ikke. Ved ikke om man kan overskrive en allerede eksisterende cookie ved blot at bruge setcookie igen med samme navn? Håber det kunne kaste lidt lys over det.
Synes godt om
Slettet bruger
28. oktober 2011 - 17:44#5
Forresten, så har jeg ledt herinde efter et tag så man kan skrive kode i sine post, men kan ikke finde det. Nogen der kunne være behjælpelige med det?
Synes godt om
Slettet bruger
28. oktober 2011 - 17:51#6
En anden ting som måske er lidt relevant: det script jeg har postet kaldes hver gang der tilføjes en bruger. Så min cookie skal opdateres hver gang der tilføjes en bruger.
Her er en samling af BB-koder for Eksperten. Her er en editor til BB-koder, der kører i Ekspertens interface - når nu IDG ikke gider implementere en editorbar.
Hvad udskrives, hvis du skriver:
else { $users = array(); // Samme som ovenfor. $users[] = new User($name, $picks, $points); var_dump($users); setcookie("users", serialize($users), time()+3600*24*5); }
Som det ses er det en rimelig lang streng der gemmes i min cookie. Har fundet ud af at det virker fint hvis strengen bliver kortere - det går galt når strengen er mere end 2225 characters lang. Er der en begrænsning på hvor meget information man kan gemme i sin cookie?
Synes godt om
Slettet bruger
28. oktober 2011 - 18:39#9
Her er en forsimplet udgave af den kode jeg har lavet. Dette virker efter hensigten og tilføjer et objekt til arrayet hver gang siden opdateres. Det stopper dog med at virker efter ca. 50 opdateringer. Hvorfor?
class Cls{ private $var;
function __construct($var) { $this->var = $var; } function getVar() { return $var; } }
"Er der en begrænsning på hvor meget information man kan gemme i sin cookie?" - i princippet nej. I praksis er det dog op til browserleverandøren. IE's kager kan således rumme 4096 bytes (incl. udløbsinfo, etc) - hvilket svarer til en streng på ca. 2000 tegn i et utf-8 miljø.
Når du er oppe på så store datamængder, som tilfældet er, er cookies ikke hensigtsmæssige. Brug en DB i stedet =)
Synes godt om
Slettet bruger
29. oktober 2011 - 15:15#11
Jamen så lader det til at jeg skal finde mig en anden løsning. Grunden til at jeg valgte at bruge en cookie var for at undgå at skulle bruge en database.
Men kan vist også godt skrive min kode noget smartere end jeg har gjort lige nu, så den fylder meget mindre.
Tak for hjælpen, er blevet klogere på cookies. Hvis du vil have de 30 point for besværet så smid et svar :D
Ellers tak, jeg samler ikke points. Læg selv et svar og accepter det, så tråden lukkes =)
Cookies er udmærkede til småting (med tryk på 'små'), men du skal ikke ret højt op i datamængde, før DB er at foretrække
Synes godt om
Slettet bruger
30. oktober 2011 - 12:34#13
Hermed lukkes tråden.
Synes godt om
Ny brugerNybegynder
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.