login  Naam:   Wachtwoord: 
Registreer je!
 Forum

gelijk $_COOKIE var kunnen gebruiken.

Offline Grayen - 29/05/2007 21:28
Avatar van GrayenPHP ver gevorderde Beste leden,

Weet iemand waarom ik niet in staat ben in mijn script om de $_COOKIE variable te kunnen gebruiken net na dat ik de cookie geset heb? Ligt dit aan de tijd dat de browser nodig heeft om het te setten, of bestaat $_COOKIE na dat je de pagina hebt gereload?

Want nu heb ik het volgende.

  1. setcookie('site', 'grayen_slagwerk', time() + 60 * 60 * 24 * 365);
  2. if(isset($_COOKIE['site']) === true)
  3. echo $_COOKIE['site'];


Als test code, maar hierbij weergeeft hij de waarde van $_COOKIE pas nadat ik de pagina een keer heb gerefreshed. Bij $_SESSION is dit niet het geval (maar ik moet in dit geval persee gebruik maken van $_COOKIE). Zou iemand hier meer informatie over kunnen geven? Zo niet, dan ga ik gewoon met sessie en cookies werken, maar dit doe ik pas als het niet mogelijk is om niet direct gebruik te maken van de $_COOKIE var.

Bij voorbaat dank,

Grayen

17 antwoorden

Gesponsorde links
Offline Elpiedro - 29/05/2007 21:37
Avatar van Elpiedro PHP interesse Zoals je al door had, ziet het script de cookie pas als je de pagina reload. Misschien kan je eerst even reloaden?
Offline Grayen - 29/05/2007 21:42
Avatar van Grayen PHP ver gevorderde Bedankt voor de reactie. Ik ging er al vanuit dat ik het juist had. Dus ik heb net een cookie/sessie oplossing gemaakt. Deze werkt. Een reload was geen optie, omdat het cookie nodig is om de database naam aan te geven. Die ook wordt gebruikt in AJAX scripts, die niet mogen reloaden.
Offline Dolfje - 29/05/2007 23:20
Avatar van Dolfje Gouden medailleGouden medailleGouden medaille

PHP ver gevorderde
Het gaat niet om een pagina reload, maar eerder om de pagina headers. De browser zend een request naar de server met daar de waarden van de huidige cookies. Daarna verwerkt jouw php-code die request en geeft dan in zijn headers mee dat de cookie veranderd is, dus alleen maar bij de volgende keer dat er een pagina gerequest wordt, wordt de nieuwe waarde meegegeven.
- Webbrowser zendt request (bv. cookie:-geen-)
- Php verwerk request en zet cookie site
- De pagina wordt verstuurt met de opdracht om de cookie site aan te maken (a.h.v. headers)
=> pas bij de volgende request is de value veranderd.

ps: Cookies kunnen ook door de user zelf veranderd worden, dus vertrouw het noooit. (met dat je over een databasenaam sprak)
Offline Wave6 - 30/05/2007 11:26
Avatar van Wave6 PHP beginner Zeg gebruik je een Localhost?
Zoja dan is het je localhost, Aangezien jij de server bent zul je meestal dingen 2 keer achter elkaar moeten refreshen....
Offline Grayen - 30/05/2007 11:58
Avatar van Grayen PHP ver gevorderde Ja ik gebruikte localhost, ik zal kijken of het daar aan lag, bedankt .

@Dolfje
Bedankt voor de duidelijke uitleg.

Citaat:
ps: Cookies kunnen ook door de user zelf veranderd worden, dus vertrouw het noooit. (met dat je over een databasenaam sprak)

In principe maakt het toch niet uit zolang ik maar controle uitvoer op de waarde van het cookie. Ook al zou ik dat niet doen, dan maakt het toch alsnog niet uit. Ze moeten eerste de andere namen van de andere databases weten en ook al weten ze dit het maakt niet uit. Als ze een waarde invullen van een database dat niet bestaat krijgen ze errors op de pagina.. Nuttig? nee.. En als ik daarvoor een controle uitvoer of het een van de databases die mag worden bezichtigd, dan zie ik geen veiligheidsgevaar? toch?
Offline Dolfje - 30/05/2007 13:43
Avatar van Dolfje Gouden medailleGouden medailleGouden medaille

PHP ver gevorderde
je kan zo alle database aflopen en daarna 'LEFT JOIN' gebruiken, of iets in die aard. Als je controleert als je cookie alleen maar alfanumeriek is (of een '_' bevat), dan is het wel goed. Alleen is dit eerder 'vuil' scripten, want als je dan iets over het hoofd ziet, heb je een beveiligingslek. (beter voorkomen dan genezen ;))
Offline Grayen - 30/05/2007 16:37
Avatar van Grayen PHP ver gevorderde Hmm, ben ik helemaal met je eens, maar weet jij dan een ander idee, hoe je het volgende op kan lossen:

Je hebt 3 sites die alledrie gebruik maken van dezelfde scripts, en ook van dezelfde ajax scripts. Hoe kan je er dan voor zorgen dat het database script weet welke database moet worden gebruikt? Er vanuit gaande dat de ajax script ook gebruik moeten maken van de database?
Offline Dolfje - 30/05/2007 16:49
Avatar van Dolfje Gouden medailleGouden medailleGouden medaille

PHP ver gevorderde
je maakt in alle drie sites een file config.php aan
  1. <?
  2. DEFINE("database",'...');

En dat maak je dan in de 3 sites verschillend.
Offline Grayen - 30/05/2007 17:11 (laatste wijziging 30/05/2007 17:12)
Avatar van Grayen PHP ver gevorderde Maar hoe weet het ajax bestand, dat op alle site kan worden gebruikt welke database hij op dat moment moet gebruiken? Want die staat niet gekoppeld aan de rest .

In principe doe ik nu hetzelfde als jij voorstelde, ik maak gebruik van
  1. myrith::$sDatabase = '...'
Offline Dolfje - 30/05/2007 17:51
Avatar van Dolfje Gouden medailleGouden medailleGouden medaille

PHP ver gevorderde
Dat ajax-bestand roept een .php-bestand aan?
In dat .php-bestand include je config.php
Offline Grayen - 30/05/2007 18:30
Avatar van Grayen PHP ver gevorderde Dat snap ik, maar hoe weet het AJAX-bestand welke config.php moet worden geinclude, oftewijl welke database of welke site.
Offline Dolfje - 30/05/2007 18:47 (laatste wijziging 30/05/2007 18:48)
Avatar van Dolfje Gouden medailleGouden medailleGouden medaille

PHP ver gevorderde
volgens mij heb je drie servers:
site1.be
site2.be
site3.be
Op alle 3 de servers staat het ajax-bestand, dit is wss een html-file met javascript. Die javascript haalt bv. site1.be/ajax.php op, dan moet je in de file ajax.php, de file global.php includen.

Ksnap het probleem niet echt:(
Offline Grayen - 30/05/2007 20:21
Avatar van Grayen PHP ver gevorderde Je snapt het inderdaad niet .

Je hebt één server waar die verschillende sites op gehost worden.

site.be/slagwerk/
site.be/mageworks/
site.be/myrith/

in elk mapje heb ik een index.php bestand geplaatst, die aangeeft welke database er wordt gebruikt voor de site en daarnaast include hij het index bestand, dat alle drie de sites gebruiken. En niet alleen hebben ze een gezamelijke index bestand, nee ze gebruiken ook allen dezelfde framework (dezelfde bestanden, op dezelfde locatie). Daarnaast is er nog een map controller, waarin zich mappen bevinden die ieder weer controller-bestanden en template-bestanden bezitten. Zo is iedere site totaal anders, maar maakt gebruik van gedeeltelijk dezelfde bestanden. Maar hoe weet het framework gedeelte nou welke site (database) er gebruikt moet worden? Nou dat kan door dat aan te geven in dat eerste mapje bijvoorbeeld in site.be/slagwerk/index.php. Het enige waar je dan mee zit hoe weet de ajax bestanden van het framework welke site (database) er wordt gebruikt. Dat kan na mijn weten niet anders als met cookies/sessie. Snap je het?
Offline JBke - 30/05/2007 22:30 (laatste wijziging 30/05/2007 22:32)
Avatar van JBke PHP gevorderde waarom kan je je pagina niet eerst herladen met een refresh: 0. Dat zou je probleem toch kunnen oplossen. Want de COOKIE data kan je idd pas gebruiken na een page reload. Als je inderdaad maar met 1 index en 1 framework werkt die per site een verschillende database en instellingen moet opladen. Met dezelfde framework werken kan ik de bedoeling van begrijpen maar waarom niet gewoon per site een andere index waar dan de gegevens per site instaan?

Of ben ik hier helemaal aan het verkeerde eind?
Offline Grayen - 30/05/2007 22:37
Avatar van Grayen PHP ver gevorderde Ja, want jouw voorstel heb ik al ik heb al per site een andere index. Voor de duidelijkheid:

site.be/slagwerk/index.php (alleen voor site van slagwerk) => (include) site.be/index/index.php (voor elke site)

Het probleem zit hem in de bestanden die niet gekoppeld zitten aan de indexen, zoals in mijn voorbeeld de ajax-php-bestanden. Die hebben namelijk ook database connectie nodig. Maar hoe weten die bestanden welke site (database) nodig is. Niet, dus dacht ik aan cookies. Dat werkt ook, maar nu is de vraag, is er een mooiere manier? pak ik het verkeerd aan?
Offline Dolfje - 30/05/2007 23:20
Avatar van Dolfje Gouden medailleGouden medailleGouden medaille

PHP ver gevorderde
als ik het juist heb, zijn die ajax-bestanden in je framework verwerkt?
Dan zou ik het zo doen:
In elk deel een file bijmaken (nu heb je index.php), namelijk ajax.php, waar je dan je database specifieerd en je ajax.php van je framework inlaad.

Werken met cookies en sessie is hier niet zo'n goede oplossing, omdat je zo problemen kan creeren. Als een user bv op de 2 sites tegelijk zit.
Offline Grayen - 31/05/2007 16:22
Avatar van Grayen PHP ver gevorderde Hmm geen gek idee . En dan iets van een pagina systeem scripten, waardoor je aan kan geven welk ajax-php-bestand hij moet inladen.
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.218s