Aplikace nefunguje v iframe v IE

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Martin Mates
Člen | 179
+
0
-

Zdravíčko. Mám akutní problém. Aplikace musí běžet z určitých důvodů v iframe na jiné adrese. Problém je v tom, že v Internet Exploreru 6,7,8 nefungují handlery. Nic se nestane, stránka se neaktualizuje.

Funguje tam hlasování. Když člověk klikne na tličítko HLASUJ. Provede se metoda handleHlasuj(), která zkontroluje jestli už nehlasuje uživatel podruhé a přičte hlas.

Všechno funguje ok, jen to nejde v iframe v IE. Nevíte, kde by mohl být zakopaný pes? Zkoušel jsem dát na konec metody ještě redirect, ale to je stejné. Posílám metodu handleHlasuj:

<?php
public function handleHlasovat($id, $csrf) {

        // Ochrana proti CSRF
        if ($csrf != $this->session->csrfProtection) {
            $this->flashMessage('Vypršel bezpečnostní časový limit. Hlasujte prosím znovu.');
            $this->redirect('Galerie:default');
        }


        // Kontrola hlasovani pomoci cookies
        $request = $this->getHttpRequest();
        $response = $this->getHttpResponse();
        $cookie = json_decode($request->getCookie('hlasovani'), true);
        if ($cookie !== null) {
            if (isset($cookie[$id]) && $cookie[$id] == 1) {
                $this->flashMessage('Pro tento recept jste již hlasoval.');
                $this->redirect('Galerie:default');
            } else {
                $cookie[$id] = 1;
            }
        } else {
            $cookie = array();
            $cookie[$id] = 1;
        }
        $response->setCookie('hlasovani', json_encode($cookie), 60 * 60 * 24 * 30);


        // Kontrola poctu stejnych IP adres
        if ($this->checkIP($id) === false) {
            $this->flashMessage('Pro tento recept jste již hlasoval.');
            $this->redirect('Galerie:default');
        }


        // Ulozeni hlasu do databaze
        $data = array();
        $data['ip'] = $_SERVER['REMOTE_ADDR'];
        $data['id_receptu'] = $id;
        try {
            $this->model->insertHlas($data);
        } catch (DibiException $e) {
            $this->flashMessage('Chyba pri komunikaci s databazi.');
        }


    }

?>

Editoval Martin Mates (26. 10. 2009 18:08)

Martin Mates
Člen | 179
+
0
-

Tak už jsem to vyřešil. Internet Explorer nedovolí stránkám v iframe nebo ve frame, aby sahaly do cookies.

„Standard P3P upozorňuje na to, že pokud sada rámců (FRAMESET) nebo nadřazené okno odkazuje na jiný web uvnitř rámce (FRAME) nebo uvnitř podřízeného okna, je podřízený web považován za obsah třetí strany. Aplikace Internet Explorer, která používá výchozí nastavení ochrany osobních údajů Střední, bez upozornění odmítá soubory cookie poslané z webů třetích stran.“ zdroj: http://support.microsoft.com/kb/323752

Pomůže přidání HTTP hlavičky: getHttpResponse()->addHeader('P3P', 'CP="CAO PSA OUR"');