por Fernando D'Angelo
28. maio 2010 12:21
Em um projeto recente desenvolvemos uma pequena aplicação em ASP.NET que deveria ser disponibilizada em portais parceiros. Esta aplicação foi instalada no nosso site e diversos parceiros, por questão de usabilidade e layout, decidiram inserir esta aplicação em um IFRAME. Essa aplicação dependia de algumas informações armazenadas na Session do usuário para o seu funcionamento correto, principalmente dados de autenticação.
No Firefox e no Google Chrome a aplicação funcionou corretamente, mas no IE (6.0, 7.0 e 8.0) o sistema não funcionava, pois as variáveis de Session não eram mantidas durante a navegação da aplicação.
Pesquisando pela WEB descobri que se trata de uma diretiva de segurança do IE que não permite que aplicações rodando em IFRAME e que estejam hospedadas em sites de terceiros armazenem Cookies na máquina do cliente, e como as variáveis de Session do ASP.NET, no seu uso padrão, dependem de Cookies, a utilização de Session ficou prejudicada. Esta diretiva de segurança é baseada na especificação P3P (Plataform for Privacy Preferences), da W3C (World Wide Web Consortium), e diz que somente sites que tenham descrito claramente como utilizarão os dados recebidos pelo IFRAME poderão ter acesso aos Cookies através de IFRAME. Esta descrição é em formato de código, e pode ser inserida no header da aplicação.
Em termos práticos, basta adicionar a linha abaixo ao seu código ASP.NET (normalmente no método PAGE_LOAD da MasterPage de uma página ASPX):
Response.AddHeader("P3P", "CP=\"IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT\"");
Outro ponto que achei importante repassar é que em um POST que eu li (infelizmente perdi o link deste POST), o usuário diz que o CHARSET da página que chama o IFRAME e das páginas internas do IFRAME devem ser o mesmo.
Mais informações em:
http://support.microsoft.com/kb/293222/
http://www.w3.org/P3P/
Abs,
Até a próxima.
Fernando D'Angelo