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?
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.
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.
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)
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....
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?
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 ;))
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?
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
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.
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?
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?
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?
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.