Autor Zpráva
Ottik
Profil *
ahoj, mám tento kód na localhostu

if (!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {
    echo "je ajax";
} else {
    echo "NENI ajax";
}
ale nefunguje to. vždy to přejde do false i když to je ajax nebo neni. Nevíte čím by to mohlo být?
Taps
Profil
v jakem souboru provadis detekci? v tom, ktery je volany pres ajax?
Davex
Profil
Ottik:
Zřejmě JavaScript neposílá hlavičku X-Requested-With nebo ne s očekávanou hodnotou, což by se dalo snadno zjistit ve vývojářských nástrojích prohlížeče.
ottik
Profil *
Aha to je divný, podívám se na to, ale co mám teda dělat když JavaScript neposílá hlavičku? Ještě sem se nedíval, tak teprve uvidím, ale dá se to nějak ovlivnit zda podle hlavičku nebo ne a jakou hodnotu pošle?


Taps:
v jakem souboru provadis detekci?
Mám pekné URL adresy a detekci provádím v souboru config.php kterej se přidá úplně ke všemu
N71
Profil *
Detekce AJAXu pomocí X-Requested-With je jen konvence, nic víc. Hlavičku není možné nastavit (stejně jako všechny ostatní hlavičky s jistými výjimkami) při komunikaci z cizí domény bez svolení CORS politikou příjemce. Takže se toho dá využít i jako prostředek CSRF ochrany. Ale nastavit ji musíš sám – lidi si už na to odvykli, protože to za ně často dělá jQuery nebo jiné frameworky.
Ottik
Profil *
Davex:
tohle je z vývojářskýho nástroje
========
Hlavičky požadavku:
Host: localhost
User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:64.0) Gecko/20100101 Firefox/64.0
Accept: */*
Accept-Language: cs,sk;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Referer: localhost
origin: localhost
DNT: 1
Connection: keep-alive

=========
Hlavičky odpovědi:
HTTP/1.1 200 OK
Date: Tue, 25 Dec 2018 11:38:11 GMT
Server: Apache/2.4.35 (Win32) OpenSSL/1.1.0i PHP/7.2.11
X-Powered-By: PHP/7.2.11
Content-Length: 355
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Content-Type: text/html; charset=UTF-8

..nevidím tam nic jako X-Requested-With

N71:
a jak to mám nastavit?


používám fetch v js
Radek9
Profil
Ottik:
fetch('url', {
  headers: {
    'X-Requested-With': 'XMLHttpRequest'
  }
})
Ottik
Profil *
Radek9:
díky, funguje to... zkoušel jsem tam dát toto
headers: {'HTTP_X_REQUESTED_WITH': 'XMLHttpRequest' a nefungovalo to, to tvoje funguje... díky
Keeehi
Profil
Ottik:
Druhá možnost je si na ajax požadavky vyhradit unikátní url. Pak se žádná detekce pomocí hlaviček dělat nemusí jelikož je to jasné z url.
Ottik
Profil *
Keeehi:
Druhá možnost je si na ajax požadavky vyhradit unikátní url.
tohle mám taky, ale když se nejedná o ajax tak to uživatele hodí na 404 stránku, podle mě je to lepší než kdyby se mu měl vypsat json text, nadruhou stranu by nikdo nenašel unikátní url. Taky mě napadlo že bych k ajaxu přidával do get nebo post formdata s název "ajax" podle kterýho by bylo poznat zda se jedná o ajax nebo ne. Teď už to funguje jak sem potřeoval, to je hlavní.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0