Brasil

20 março 2008 ~ 35 Comentários, deixe o seu »

Problema ao usar IE7 + Iframe + Session + Cookie + Domínio diferente (cross-domain)

Passei por um problema agora no sistema que faço para a Telequality que é chato e não tem muita coisa escrita sobre.

Quando você usa um iframe, a página de dentro do iframe está em um domínio diferente da página que possui o código iframe, e essa página interna usa session com cookies, o IE7 por padrão ignora o cookie silenciosamente.

Isso pode acontecer no IE6 dependendo das configurações de segurança, mas não acontece por padrão, pois as configurações que vêm de fábrica são mais tranquilas do que aos do IE7.

Para corrigir o problema, é necessário enviar um header com as diretivas de segurança P3P na página que é chamada dentro do iframe.

No meu caso era um PHP e por isso inclui a seguinte linha no código:

header(‘p3p: CP="CAO PSA OUR"’);

A linha seguinte diz para o navegador que o site fornece acesso a própria conta de informação (CAO), que os dados analisados são somente “pseudo-analisados” o que significa que os dados estão conectados à sua persona on-line e não à sua identidade física (PSA) e que os dados não são fornecidos para quaisquer agências externas para uso de tais agências (OUR).

Com isso o IE para de frescura e aceita os cookies dentro do iframe.

Abraços e até a próxima.

35 Respostas para “Problema ao usar IE7 + Iframe + Session + Cookie + Domínio diferente (cross-domain)”

  1. Pedro Rogério 20 março 2008 at 6:25 PM Permalink

    Muito bom, não sabia disso. Valeu a dica!!!

  2. Vera 2 abril 2008 at 6:01 PM Permalink

    Estou com problemas em uma página que abre outra em um popup que tenho que transferir dados entre elas por sessaõ. No firefox funciona. Não consegui resolver isto com sua dica, mas acho que é por ai. Poderia me ajudar?

  3. Rafa 2 abril 2008 at 11:27 PM Permalink

    Vera,

    O caminho não tem nada haver com que escrevi aqui.

    Tente este link: http://www.irt.org/articles/js205/index.htm

    Abraços

  4. Daniel 9 maio 2008 at 11:12 AM Permalink

    Olá Rafael.
    Estou desenvolvendo uma Intranet para uma empresa e fiz um menu em asp que utiliza iframe e Java script para receber o cabeçalho do sql server e mostrar abrindo e fechando.
    No meu computador que é um Windows XP com IE7 funciona perfeitamente.
    Em meu outro computador que é XP e IE6 ou Firefox funciona também.
    No entanto, no servidor deles que é Windows 2003 R2 e IE7, simplesmente ao entrar na instrução iframe ele fica esperando resposta da página e assim não abre o menu.
    O que você acha que poderia ser?
    Me responda por e-mail.
    Muito obrigado.

  5. Rafa 9 maio 2008 at 10:50 PM Permalink

    Daniel,

    Podem ser muitas coisas, mas neste caso parece ter haver apenas com a parde server-side. Só debugando o código mesmo.

    Abraços

  6. Luiz Fernando 19 setembro 2008 at 8:51 AM Permalink

    Rafael você poderia colocar um exemplo aqui??

    muito obrigado!!!

  7. Rafael Lima 24 setembro 2008 at 11:26 PM Permalink

    Oi Luiz,

    Exemplo de que especificamente? A situação não é um código em si…

    Pode ser qualquer programação que utilize Cookies ou Sessions que esteja rodando dentro de um frame que está em outro domínio.

    Abraço

  8. Marcos 29 setembro 2008 at 11:51 AM Permalink

    Parabéns pela dica!
    Resolveu meu problema.
    Marcos

  9. Danilo 30 setembro 2008 at 4:52 PM Permalink

    Parabéns e obrigado.
    Resolveu meu problema.

    Minha página está em ASP e ficou assim:
    Response.AddHeader “P3P”, “CP=”"NOI CUR OUR IND UNI COM NAV INT”"”

  10. V. Pozzebon 15 dezembro 2008 at 7:16 PM Permalink

    Meu velho, tu não imagina a mão na roda que tu me deu com essa dica… Meus sinceros agradecimentos…

  11. Marcos Ontem at 12:56 PM Permalink

    estou tendo um probleminha com uma pagina html,
    to usando o iframe, que abre no firefox normalmente mas não abre no ie7, ser que vc pode me ajudar?

  12. Rafael Lima 11 fevereiro 2009 at 9:59 PM Permalink

    Marcos,

    Infelizmente não posso ajudar com questões específicas. Espero que compreenda.

  13. Felipe 3 março 2009 at 1:41 PM Permalink

    Muito Obrigado Rafael.
    Resolveu de imediato.

    abs

  14. anonimo 11 junho 2009 at 1:41 PM Permalink

    Cara, salvou, sem comentários. =]

  15. Carlos Roberto Wassolowski 30 junho 2009 at 10:22 AM Permalink

    Estou desenvolvendo um sistema para uma empresa utilizando PHP Mysql, o qual é o programa de controle e gerenciamento de toda a empresa. Como são varios usuarios com permissões diferentes, estou usando session para transmitir alguns dados e fazer o controle de usuário. Eu estava utilizando composição da pagina etraves de chamada na url ex.: “comercial.com.br?sc=clientes” e dentro da pagina tinha uma chamada para “sc”, a questao é a seguinte nem sempre o usuario faz logout, muitas vezes eles simplesmente fecham a aba ou o novegador, e em algumas situações a session não é destruida então se algem utilizasse o computador e tentasse entrar direto na pagina interna poderia conseguir, ja que a sessiom tinha dados de usuario e login, então resolvi inserir na pagina mestre um script que encerra session ao fechar aba ou navegador a questao é que cada vez que o usuaio clica em um link da propria pagina ela atualiza e faz o onbeforeunload destruindo a sessção e obrigando o usuario a logar novamente.entao estou tentando fazer a navegação com iframe pois o link quando clicado chama a pagina secundaria ex.:clientes.php dentro do iframe e nao gera o refresh da pagina mestre assim o usuario navega o quanto quiser e quando sair, independente da forma, a sessão é encerrada. Bom, a pergunta é que tipo de vulnerabilidades posso ter usando iframes? se tiver alguma idéia o sugestao sobre o assunto.
    Desdeja agradeço sua atenção

  16. Rafael 8 julho 2009 at 10:51 AM Permalink

    Poxa, que coisa chata o i.e… mas vc me salvou tbm colega!! Muito obrigado por compartilhar.

  17. rafael 23 julho 2009 at 3:27 PM Permalink

    Como seria esse código no caso de uma pagina em html? Tenho o mesmo problema!
    desde já agradeço!

  18. Renan 21 agosto 2009 at 5:53 PM Permalink

    Bom dia Rafael,

    No meu caso, a aplicação que está sendo executada dentro do iframe é de outra empresa (eu não tenho acesso aos arquivos da aplicação que está dentro do iframe) …
    será que existe uma forma de sanar este problema usando o P3P ??

  19. Thiago S. Camargo 5 novembro 2009 at 12:11 PM Permalink

    Nossa.. se tivesse a conta online mandava um troco hhehehhee…
    uso o iframe para “maquear” um subdominio…

    Criei um domínio e para ele tem redirecionamento de subdomínio (*) para um arquivo com iframe.. este le o endereço e manda para outro endereço com variável GET… e tava a uma semana me encomodando.

    Muito boa a dica.

    Obrigado

  20. Vítor 25 novembro 2009 at 11:53 AM Permalink

    brother, nem tou usando iframe, na verdade estava tentando um problema de sessions no IE (por causa de configurações de segurança e privacidade), coloquei essa linha e o negoço funcionou! kkkk
    Magica! vlw d+++

  21. Leo 14 dezembro 2009 at 7:45 PM Permalink

    Cara,, como o cara disse no comentario anterior, mágica.
    Eu nem tentei entender, eu só sei que eu colei e funcionou.

    Muito obrigado cara

  22. Eric 20 setembro 2010 at 2:00 PM Permalink

    Oi Rafael.

    Coloquei esse header no meu sistema, e liberou o uso de cookies (a sessão do iframe se mantém). Porém o IE não está permitindo nenhuma atividade AJAX.

    Já viu este problema? Sabe solucioná-lo?

    Desde já grato

  23. Rafael Lima 23 setembro 2010 at 11:12 PM Permalink

    Eric,

    Talvez isso tenha a ver com Ajax Cross Domain, procure ver se é isso.

    Abraço

  24. Eric 24 setembro 2010 at 3:46 PM Permalink

    Oi Rafael!

    Eu me equivoquei: Realmente estava com problema ao manter a sessão, mas não havia problema com ajax, até mesmo não faço requisições cross domain. Na verdade era uma configuração do sistema que eu tinha me esquecido de ajustar.

    De qualquer forma, valeu pela ajuda.

    abraço.

  25. Lucas 24 setembro 2010 at 9:17 PM Permalink

    Oi Rafael! Excelente post. É um assunto que realmente não é muito abordado, parabéns pela iniciativa. Pelo que eu entendí deve-se colocar este código no arquivo que vai rodar no iframe. É isso? No meu caso o problema não é iframe, e sim um redirecionamento que faço para um site externo, e retorna resposta para meu site, infelizmente algumas pessoas me relatam não recuperar as sessions. Na prática é:

    PAGINA1(DADOS CLIENTE)> PÁGINA2(CRIA AS SESSIONS)> SITE CIELO> PÁGINA3 (RECUPERA AS SESSIONS)
    Na página3 é que não consigo recuperar. O pior é que é instável. tem vezes que consigo recuperar, vezes não. Isso que é estranho.

    Valeu pela força!

  26. Rafael Lima 26 setembro 2010 at 2:32 AM Permalink

    Lucas,

    Não dá pra saber o que é no seu caso. Você precisa debugar mesmo.

    Abraço

  27. Belini 30 setembro 2010 at 5:39 PM Permalink

    Cara, você me ajudou muito com sua dica.
    Valeu.

  28. Gabriel 17 outubro 2010 at 9:24 AM Permalink

    Cara parabéns, ajudou a min e tenho certeza que a muitos outros.

    Obrigado! Abraços

  29. Xan 12 novembro 2010 at 9:14 AM Permalink

    Bom dia Rafael

    Seu post me ajudou muito, parabéns pela dica!

    Abração

    Xan

  30. Thiago 31 maio 2011 at 9:03 AM Permalink

    Me ajudou muito!!

    No meu caso foi em jsp que é assim:
    response.setHeader(“P3P”,”CP=’IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT’”);

    Valeu!

  31. Julio 25 julho 2011 at 9:44 AM Permalink

    Olá pessoal, estou com u problema com meu site no IE. A segunda busca que faço no meu site no IE sempre retorna os dados da primeira busca. Nunca atualiza as buscas… só no IE. Alguem poderia me ajudar
    Att.
    Julio César
    julio731@hotmail.com
    julio0345@gmail.com
    Abraços

  32. Julio 25 julho 2011 at 9:45 AM Permalink

    meu site é:
    http://www.seminovosdivinopolis.com.br. Tinha preenchido mas nao apareceu.

  33. Robson 30 agosto 2011 at 2:03 PM Permalink

    Vlw. salvou minha pele!!!

  34. anderson 6 outubro 2011 at 12:10 PM Permalink

    Cara, muito obrigado por compartilhar esta informação! Estava com este mesmo problema e queimando os neurônios para entender o que o bendito IE estava fazendo… inseri o código no header e agora tenho acesso a aplicação perfeitamente!

    Atitudes como a sua é que fazem da net um lugar espetacular… parabéns pela iniciativa.