(megoldva: újraírás lesz, request_order nincs 5.2-n, variables_order EGPS esetén a COOKIE létre se jön, pedig kéne, ergo újraírás lesz adott programrészeken)
A kérdés: miért kerül be a $_COOKIE tartalma a $_REQUEST-be?
Helyzet:
Adott egy webapp, amiben a COOKIE tartalma bekerül a REQUEST-be, minden futáskor.
Próbáltam az alábbi beállításokkal:
php.ini
request_order = "GP";
variables_order = "GP";
register_globals = "Off";
De ezzel látszólag kikapcsoltam a SESSION változót, GP-t GPS-re módosítva szintén nem jó.
PHP verzió: 5.2.14 (rendszergazda nem frissít)
SZERK.: Windows-os szerverről van szó, ha ez változtat valamin. (Az a kevés írás amit találtam mind IIS-ről és hasonló jelenségekről szól.)
(nem ismerem a legacy php-k php.ini beállításait, és google nem adott értelmes találatokat a problémára, a legtöbb az volt, hogy request_order-t és variables_order-t kapcsolgassak, illetve hogy "régen" a COOKIE része volt a REQUEST array-nek automatikusan...de már a request_order és a variables_order se úgy működik, ahogy a doksi alapján kéne neki, de lehet félreértelmezem)
- 6443 megtekintés
Hozzászólások
Miért, szerinted hogyan küldi el a böngésző a cookie tartalmát a szervernek, ha nem a requestben?
- A hozzászóláshoz be kell jelentkezni
Azokon a szervereken ahol eddig dolgoztam (5.3 és felette), ott nem volt a REQUEST-ben a COOKIE tartalma, amikor dump-oltam a request-et.
- A hozzászóláshoz be kell jelentkezni
A requestet a kliens küldi szerintem. A cookie-t pedig éppen azért küldi át, hogy például session-t vagy oldalra vonatkozó beállításokat ismertesse a szerverrel.
- A hozzászóláshoz be kell jelentkezni
Az _REQUEST egy komplex szuperglobális, a _GET, _POST, _ENV, satöbbik összefuttatásából keletkezik.
Hogy mi ír felül mit, meg egyáltalán melyik kerül bele, azt a variables_order adja meg (nyilván a jobbrább levő felülírja a meglevő kulcsot). Ez az elmélet.
Hogy a valóság ebből mi, azt pedig az aktuális php binárisod dönti el XD
- A hozzászóláshoz be kell jelentkezni
Ezzel lesz itt gond, mert a variables_order állítgatása esetén volt, hogy GPS beállítás mellett még a post se jött létre, konkrétan nem volt POST array
Olyan, mintha a variables_order-be automatikusan hozzáadná a COOKIE tartalmát.
- A hozzászóláshoz be kell jelentkezni
hát lehet ez fent is van phpwtf-en...
- A hozzászóláshoz be kell jelentkezni
Tipp hogy mi a frászt lehet vele kezdeni? Konkrétan a legelső futtatott sortól már ott van a cookie teljes tartalma a request-ben.
- A hozzászóláshoz be kell jelentkezni
Akkor meg micsoda szerencse hogy minden megvan a helyen, ugyebar a $_GET meg a $_POST -ban egyebkent is
- A hozzászóláshoz be kell jelentkezni
Konstruktív formában is adthattál volna tanácsot, konkrétan vannak olyan programrészek ahol okkal használom a request-et, mert get és post paraméterek is mennek át. De mondjuk most köss ebbe is bele.
- A hozzászóláshoz be kell jelentkezni
Azért ez nem egy olyan lehetetlen probléma, hogy ne lehetne megoldani $_REQUEST nélkül. Kb.:
$param = array_key_exists('param', $_POST) ? $_POST['param'] : $_GET['param'];
- A hozzászóláshoz be kell jelentkezni
Megoldás van, csak mivel nem a programon belül történik a cookie-k bevonása, ezért nem is ott akartam megoldani (helyén kezelni a dolgot), azóta is php.ini problémának látszik, mivel több helyen is futkos a program, és csak itt jelentkezik a probléma, nem akarok egy komplett workaround-ot írni rá.
- A hozzászóláshoz be kell jelentkezni
Hát...
Rögzíted, mit hol fogadsz csak el, és célzottan olvasod be a szuperglobálisokból.
Vagy manuálisan futtatod össze őket, amíg nem frissül a php :-)
- A hozzászóláshoz be kell jelentkezni
Ebben a verzióban még nincs request_order (lásd a doksiban. Milyen gondot okoz egyébként a kuksik jelenléte?
- A hozzászóláshoz be kell jelentkezni
request_order nincs, de variables_order van.
(csak a későbbi kompatibilitás miatt írtam bele, ha nem lesz más megoldás)
A gond: vannak olyan programrészek, amik a REQUEST tömböt egyben dolgozzák fel, nem csak adott részeit, amit ráküldök, azt megteszi. viszont vannak most olyan értékek a request-ben, amiket nem tud használni, mert nem léteznek hozzá kapcsolható adatok. A terv az volt, hogy egy rugalmas feldolgozót írunk, amit nem kell minden új opció létrejöttekor módosítani, hanem elég azt az új opciót átküldeni neki, illetve a hozzá kapcsolódó adatokat feltölteni adatbázisba, ő megkeresi majd, és megcsinálja. Az elv jónak tűnt, 5.3-on POST és GET van csak a REQUEST-ben, hibatűrés megoldva azzal, hogy ha valaki valamit ráposztol, akkor eldobja magát a program hibakóddal, viszont a cookie-ra nem gondoltunk.
Amit most csinálok: variables_order EGPS-re állítva, viszont most úgy tűnik mintha a $_COOKIE se jönne létre.
- A hozzászóláshoz be kell jelentkezni