[php] Array opslaan in Cookie *

Pagina: 1
Acties:
  • 689 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

  • sanzut
  • Registratie: December 2006
  • Laatst online: 19:44

sanzut

It's always christmas time

Topicstarter
Hoi,

Ik heb geprobeerd om de inhoud van de POST data in een cookie op te slaan via
PHP:
1
 setcookie('formulier_inhoud',$_POST);


Dit resulteert echter in een error omdat de value van een cookie geen array mag zijn.
Hoe kan ik de inhoud van mijn formulier nu toch doorgeven over meerde pagina's, waarbij het gebruik van hidden-fields niet mogelijk is?

Ik heb op PHP.net al gezocht naar een passende oplossing, maar helaas zonder succes.

Acties:
  • 0 Henk 'm!

  • BtM909
  • Registratie: Juni 2000
  • Niet online

BtM909

Watch out Guys...

Sessions is het magische woord ;)

En verzin volgende keer een betere topictitel, want cookies beschrijft niet echt je probleem ;)

Ace of Base vs Charli XCX - All That She Boom Claps (RMT) | Clean Bandit vs Galantis - I'd Rather Be You (RMT)
You've moved up on my notch-list. You have 1 notch
I have a black belt in Kung Flu.


Acties:
  • 0 Henk 'm!

Verwijderd

Serializen:

http://php.net/serialize
http://php.net/unserialize

[ Voor 45% gewijzigd door Verwijderd op 10-07-2007 22:45 . Reden: UNserialize, unserialize.. ]


Acties:
  • 0 Henk 'm!

Verwijderd

1: Serialize de array. Dit is niet de mooite oplossing, omdat een cookie maar een beperkte hoeveelheid gegevens kan opslaan.
2: Gebruik een session met een session cookie. De cookie bevat dan alleen maar een referentie naar de sessie-informatie. Daarnaast bieden sessions nog wel meer voordelen. De session is dan ook de betere keuze.

Acties:
  • 0 Henk 'm!

  • Rigi
  • Registratie: September 2001
  • Laatst online: 30-11-2018
Waarom niet gewoon de belangrijke dingen uit $_POST halen en die in je cookie proppen?

Acties:
  • 0 Henk 'm!

  • sanzut
  • Registratie: December 2006
  • Laatst online: 19:44

sanzut

It's always christmas time

Topicstarter
over die titel ben ik met je eens, maar zal het de volgende x wel goed doen(a)
Rigi schreef op dinsdag 10 juli 2007 @ 22:29:
Waarom niet gewoon de belangrijke dingen uit $_POST halen en die in je cookie proppen?
Het zijn te uitgebreide formulieren. Zou dit normaal via hidden field fixxen, nu niet mogelijk.

Maar kan ik in een $_SESSION['iets'] wel een array opslaan?

[ Voor 65% gewijzigd door sanzut op 10-07-2007 22:32 ]


Acties:
  • 0 Henk 'm!

  • disjfa
  • Registratie: April 2001
  • Laatst online: 03-07 14:47

disjfa

be

sanzut schreef op dinsdag 10 juli 2007 @ 22:30:
kan ik in een session var wel een array opslaan? heb namelijk geen trek in vele 10tallen variabelen te moeten setten, enz. enz. enz. het gaat namelijk over een redelijk uitgebreid formulier
Ja. Maar als je het echt zou willen in een koekje kan je er ook gewoon een foreach/for/while/etc loop omheen zetten.

disjfa - disj·fa (meneer)
disjfa.nl


Acties:
  • 0 Henk 'm!

Verwijderd

Verwijderd schreef op dinsdag 10 juli 2007 @ 22:28:
Serializen:

http://php.net/serialize
http://php.net/deserialize

overigens kan je ook dit gebruiken ivm makkelijkheid:
PHP:
1
$_COOKIE['keynaam'] = 'test';
Dat doet alleen wat anders dan je waarschijnlijk verwacht. Van persistentie is dan niet echt sprake.

Acties:
  • 0 Henk 'm!

Verwijderd

sanzut schreef op dinsdag 10 juli 2007 @ 22:30:
over die titel ben ik met je eens, maar zal het de volgende x wel goed doen(a)

kan ik in een session var wel een array opslaan? heb namelijk geen trek in vele 10tallen variabelen te moeten setten, enz. enz. enz. het gaat namelijk over een redelijk uitgebreid formulier
In de $_SESSION superglobal kun je zonder problemen scalar variabelen en arrays opslaan. Het serializen/unserializen gebeurt automatisch, zolang session_start () maar wordt aangeroepen.

Acties:
  • 0 Henk 'm!

  • Deikke
  • Registratie: Juni 2004
  • Laatst online: 06:44
Verwijderd schreef op dinsdag 10 juli 2007 @ 22:28:
Serializen:

http://php.net/serialize
http://php.net/deserialize

overigens kan je ook dit gebruiken ivm makkelijkheid:
PHP:
1
$_COOKIE['keynaam'] = 'test';
krozz56: Het (de)serializen van dit soort dingen is erg slecht en slaat een gat in de beveiliging van je website.

krozz56: Ik weet overigens niet of dat laatste werkt, aangezien je vaak ook een tijd wilt meegeven, is het op die manier niet alleen uit te lezen?

Eventueel kun je gebruik maken van explode() en join(), maar dan moet je wel kijken of dat geldig is.

Als je wat wilt onthouden, kun je dit beter in de session doen.

Acties:
  • 0 Henk 'm!

  • sanzut
  • Registratie: December 2006
  • Laatst online: 19:44

sanzut

It's always christmas time

Topicstarter
Oke dan doe ik het met sessie's :)

Acties:
  • 0 Henk 'm!

Verwijderd

Deikke schreef op dinsdag 10 juli 2007 @ 22:33:
[...]

krozz56: Het (de)serializen van dit soort dingen is erg slecht en slaat een gat in de beveiliging van je website.

krozz56: Ik weet overigens niet of dat laatste werkt, aangezien je vaak ook een tijd wilt meegeven, is het op die manier niet alleen uit te lezen?

Eventueel kun je gebruik maken van explode() en join(), maar dan moet je wel kijken of dat geldig is.

Als je wat wilt onthouden, kun je dit beter in de session doen.
Klopt, het is aanbevolen zo min mogelijk gegevens te bewaren client side, enkel weet ik niet in welke context dit gebruikt gaat worden. In ieder geval was dit wel het juiste antwoord op de vraag van de topicstarter, maar zeker niet de wijste. Sterker nog, ik heb nog nooit cookies of serializing gebruikt, hehe

Ik denk dat door het wijzigen van waardes in de superglobal Cookie wel worden doorgegeven aan de browser, alhoewel ik dit niet met zekerheid kan zeggen. Ik kan dit momenteel niet testen, dus laat ik dit wel even weg ;)

Acties:
  • 0 Henk 'm!

  • Niemand_Anders
  • Registratie: Juli 2006
  • Laatst online: 09-07-2024

Niemand_Anders

Dat was ik niet..

Er moet ook niet vergeten worden dat een browser bij elke request altijd *alle* cookies van die website meestuurt. Ook als deze niet op de betreffende pagina wordt gebruikt. HTTP is stateless. De browser doet een verzoek en verwacht een antwoord. Ze gaan niet kwartetten waarbij de webserver vraagt: Mag ik van jouw uit de collectie cookies de inhoud van 'cookie naam'..

Daarnaast moet je ook uitkijken voor sommige (windows) firewalls. Deze willen nog weleens cookies (en referrers) wissen uit het oogpunt van privacy. Wij koppelen de sessie aan het IP en geven vervolgens altijd het sessie-id als parameter van de url mee. Bij een volgende request wordt gecontroleerd of het sessie-id bij het ip hoort. Wij hebben de sessie inhoud zelf in een database staan.

If it isn't broken, fix it until it is..


Acties:
  • 0 Henk 'm!

Verwijderd

Niemand_Anders schreef op woensdag 11 juli 2007 @ 14:47:

Daarnaast moet je ook uitkijken voor sommige (windows) firewalls. Deze willen nog weleens cookies (en referrers) wissen uit het oogpunt van privacy.
Firewalls horen sowieso niets aan verkeer op dat niveau aan te passen. Dat sommige beveiligingssuites dat doen is op zich niet zo verkeerd. Ik ben alleen van mening dat het dan ook niet meer de taak van de developer is om dat "op te gaan lossen". Wie geen cookies accepteert kan niet gebruik maken van alle functionaliteit. Willen ze dat wel, dan moeten ze hun filter maar aanpassen door je website op een whitelist te zetten.
Wij koppelen de sessie aan het IP en geven vervolgens altijd het sessie-id als parameter van de url mee. Bij een volgende request wordt gecontroleerd of het sessie-id bij het ip hoort. Wij hebben de sessie inhoud zelf in een database staan.
En vervolgens stuurt Jantje op school een link door naar Pietje en hebben ze dezelfde sessie te pakken...

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 02:21

Janoz

Moderator Devschuur®

!litemod

Verwijderd schreef op woensdag 11 juli 2007 @ 15:04:
En vervolgens stuurt Jantje op school een link door naar Pietje en hebben ze dezelfde sessie te pakken...
Dat niet alleen. De meegegeven parameter zorgt ervoor dat de pagina eigenlijk maar 1malig is. Je kunt hem niet opslaan in je favorieten omdat de volgende keer als je op de site komt je niet meer dezelfde sessie (of zelfde ip) hebt. Searchengines kunnen niks met de site omdat de URL's steets veranderen en searchresults zijn zinloos omdat mensen op een 'sessie ongeldig' pagina uitkomen.

Al met al een stuk slechtere oplossing dan het maar accepteren dat cookies aan moeten staan.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

Verwijderd

Je kan ook arrays op slaan in je cookie door het volgende te schrijven:

PHP:
1
2
3
setcookie('array[element]', 'value', time() + 3600, '/');
// spreek aan als volgt:
echo $_COOKIE['array']['element'];

Acties:
  • 0 Henk 'm!

  • GlowMouse
  • Registratie: November 2002
  • Niet online
sanzut schreef op dinsdag 10 juli 2007 @ 22:30:
[...]
Het zijn te uitgebreide formulieren. Zou dit normaal via hidden field fixxen, nu niet mogelijk.
Bedoel je dat mensen enkele megabytes aan informatie typen? In dat geval zou ik toch wat vinden om informatie tussentijds op te slaan, want iemand die toevallig geen cookies accepteert zal het niet fijn vinden er na het typen van zoveel gegevens achter te komen dat alles weg is.

[ Voor 56% gewijzigd door GlowMouse op 11-07-2007 20:40 ]


Acties:
  • 0 Henk 'm!

  • sanzut
  • Registratie: December 2006
  • Laatst online: 19:44

sanzut

It's always christmas time

Topicstarter
GlowMouse schreef op woensdag 11 juli 2007 @ 20:38:
[...]

Bedoel je dat mensen enkele megabytes aan informatie typen? In dat geval zou ik toch wat vinden om informatie tussentijds op te slaan, want iemand die toevallig geen cookies accepteert zal het niet fijn vinden er na het typen van zoveel gegevens achter te komen dat alles weg is.
HTML gegevens endergelijken, en cookies worden al eerder gebruikt. Als de user ze tussentijds zou uitzetten ishet zijn eigen probleem, maar heb intussen Session's gebruikt :)

Acties:
  • 0 Henk 'm!

  • Miky-Man
  • Registratie: Juli 2007
  • Laatst online: 30-07 21:14
Je kan idd beter sessions gaan gebruiken.
Maar dat probleem van je zou je met implode kunnen oplossen.
Cookies zijn trouwens ook niet veilig, samengevat: gebruik sessions! ;)

[ Voor 5% gewijzigd door Miky-Man op 11-07-2007 20:45 . Reden: Te traag typen ;) ]

Desktop CPU: 3.40GHz | RAM: 2GB | HDD: 400GB | Display: 21" | OS: Windows XP
Laptop CPU: 120MHz | RAM: 16MB | HDD: 1,6GB | Display: 6.1" TFT | OS: n/a


Acties:
  • 0 Henk 'm!

  • Mister_X
  • Registratie: Februari 2000
  • Laatst online: 17-04 14:07
wat is er mis met

foreach($_POST as $key => $value)
{
setcookie('cookie[{$key}]',$value,time()+9999);
}

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 02:21

Janoz

Moderator Devschuur®

!litemod

Mister_X schreef op donderdag 12 juli 2007 @ 15:31:
wat is er mis met

foreach($_POST as $key => $value)
{
setcookie('cookie[{$key}]',$value,time()+9999);
}
Er is een maximum aan het aantal cookies dat een browser accepteerd, en er is geen enkele manier om dat te detecteren, anders dan te merken dat je de gegevens in het volgende request mist.

[ Voor 16% gewijzigd door Janoz op 12-07-2007 16:03 ]

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'

Pagina: 1