Autor Zpráva
marek187
Profil
Na hlavnu doménu (www.domena.sk) posielam požiadavku zo subdomény (user.domena.sk) cez tento javascript:

<script type="text/javascript" src="include/js/jquery-1.4.3.min.js"></script>
    <script type='text/javascript'>   
        $(document).ready(function(){
            $(".buynow").click(function() {
                var Index = $(this).index(".buynow");
                var Id = $(".buynowid:eq("+Index+")").attr("value");
                $.get('user/actions/action_addcart.php?id='+Id, function(data) {
                    $("#action").slideUp();
                    $("#action").html(data);
                    $('#action').slideDown();
                });
            });
        });    
    </script>

www.domena.sk/user/actions/action_addcart.php sa cez symlink mení na subdoménu user.domena.sk/actions/action_addcart.php.

Nastavením header("Access-Control-Allow-Origin: http://www.domena.sk"); v action_addcart.php som javascript opäť rozbehal, avšak nastal problém so $_SESSION, ktoré sa nepresúvajú spolu s požiadavkou. Preto som nastavil aj header("Access-Control-Allow-Credentials: true");, ale žiadna zmena. Údajne treba ešte nejako upraviť javascript pridaním withCredentials, ale netuším ako a či to skutočne vyrieši môj problém.
Chamurappi
Profil
Reaguji na marka187:
Nevím, jestli jsem tě správně pochopil, ale symlink je vlastností souborového systému, ne? Takže je mimo hru.
Z pohledu prohlížeče adresa user/actions/action_addcart.php vrátí co? Nějaké HTTP přesměrování, nebo data? Pokud se nepřesměrovává, nejsou Access-Control hlavičky potřeba a tvůj PHP skript samozřejmě nedostane cookies, které jsou vázané na doménu user.domena.sk, protože požadavek se posílá na www.domena.sk.

Můžeš popsat, co je přesně cílem? A proč to nejde v rámci jedné domény?
marek187
Profil
Chamurappi:
Můžeš popsat, co je přesně cílem? A proč to nejde v rámci jedné domény?

Nejde to v rámci jednej domény, pretože existuje nejaký bezpečnostný prvok nazývaný same-origin policy, ktorý blokuje požiadavky z cudzích domén, aj vlastných subdomén, dokým to nepovolíme. Čo sa týka toho symlinku, tak som to popísal len preto, aby ste vedeli prečo je v javascripte cesta user/actions/action_addcart.php, resp. že ten súbor sa načítava automaticky už zo subdomény user.domena.sk. Tento súbor má vykonať potrebné požiadavky a vrátiť mi spať správy, ale pokiaľ užívatel nie je prihlásený, tak má vratiť správu, že je potrebné sa prihlásiť. A tu nastáva problém, že aj po prihlásení stále vyhadzuje túto správu, resp. nevie vykonať potrebné požiadavky, lebo neprenesie $_SESSION. Bez hlavičky Access-Control-Allow-Origin mi tento javascript nevyhodí žiadnú správu, resp. nefunguje. Našiel som na rôznych fórach, že je potrebné skombinovať hlavičku Access-Control-Allow-Credentials s withCredentials: true v javascripte a že následne by to malo fungovať, ale neviem s tým už ďalej pohnúť.
Chamurappi
Profil
Reaguji na marka187:
pretože existuje nejaký bezpečnostný prvok nazývaný same-origin policy
O tom vím, já se ptal, proč to nemůžeš ze své strany udělat tak, že bys byl stále na stejné doméně. Ptám se, zda to rozparcelování na subdomény opravdu k něčemu je, nebo jestli to jen vytváří problémy :-)

aby ste vedeli prečo je v javascripte cesta user/actions/action_addcart.php, resp. že ten súbor sa načítava automaticky už zo subdomény
Požadavek ale posíláš na stále stejnou doménu a pokud ten PHP skript nepřesměrovává na user.domena.sk (přes HTTP), tak Access-Control hlavičky vůbec nepotřebuješ… jsi na stále stejné doméně www.domena.sk. Nebo jak podle tebe přijde prohlížeč do kontaktu s doménou user.domena.sk? Viz moje druhá+třetí otázka v minulém příspěvku.

resp. nevie vykonať potrebné požiadavky, lebo neprenesie $_SESSION
Nepřenesou se ti cookies pro doménu user.domena.sk, ale pro doménu www.domena.sk. Na které doméně ta session funguje? Řekl bych, že by mohla fungovat na obou, protože cookie může mít nastavenou platnost pro celou doménu druhého řádu. Ale to je spíš otázka z oblasti PHP…
marek187
Profil
Chamurappi:
O tom vím, já se ptal, proč to nemůžeš ze své strany udělat tak, že bys byl stále na stejné doméně. Ptám se, zda to rozparcelování na subdomény opravdu k něčemu je, nebo jestli to jen vytváří problémy :-)
Nie je to nevyhnutné, len som sa rozhodol užívateľské rozhranie umiestniť na subdoménu. Mám aj administrátorske rozhranie na subdoméne, tam však nebehám s požiadavkami medzi hlavnou domenou a subdoménou. Dal si mi však teraz chrobáka do hlavy, či to má cenu sa s tým baviť vrámci užívateľského rozhrania a nevrátiť to radšej späť na klasický adresár. Možno by to bolo tak aj praktickejšie a jednoduchšie. :)

Požadavek ale posíláš na stále stejnou doménu a pokud ten PHP skript nepřesměrovává na user.domena.sk (přes HTTP), tak Access-Control hlavičky vůbec nepotřebuješ… jsi na stále stejné doméně www.domena.sk. Nebo jak podle tebe přijde prohlížeč do kontaktu s doménou user.domena.sk? Viz moje druhá+třetí otázka v minulém příspěvku.
Po zadaní www.domena.sk/user/actions/action_addcart.php sa automaticky presmeruje na user.domena.sk/actions/action_addcart.php, takže súbor už načítava zo subdomény.

Nepřenesou se ti cookies pro doménu user.domena.sk, ale pro doménu www.domena.sk. Na které doméně ta session funguje? Řekl bych, že by mohla fungovat na obou, protože cookie může mít nastavenou platnost pro celou doménu druhého řádu. Ale to je spíš otázka z oblasti PHP…
Session/cookies som nastavil cez .htaccess tak, aby platili na hlavnej doméne aj subdoménach, čiže v tom problém nie je. Pokiaľ do prehliadača zadám konkrétnu požiadavku napr. user.domena.sk/actions/action_addcart.php?id=5, tak všetko urobí správne, len keď sa to zadáva cez javascript na hlavnej doméne, tak nepresúva aj $_SESSION, lebo to treba nejako povoliť.

//Edit: Zrušil som subdoménu pre užívateľské rozhranie, čím som sa zbavil tohto problému, ale keby niekto vedel riešenie, tak sa môže oň podeliť.

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

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