Eu consegui que funcionasse, mas a solução é um pouco complexa, então tenha paciência comigo.
O que está acontecendo
Como é, o Internet Explorer oferece menor nível de confiança às páginas IFRAME (o IE chama esse conteúdo de "terceiros"). Se a página dentro do IFRAME não tiver uma Política de Privacidade, seus cookies serão bloqueados (o que é indicado pelo ícone de olho na barra de status, quando você clica nela, mostra uma lista de URLs bloqueados).
(fonte: piskvor.org )
Nesse caso, quando os cookies são bloqueados, o identificador da sessão não é enviado e o script de destino gera um erro 'sessão não encontrada'.
(Tentei definir o identificador da sessão no formulário e carregá-lo das variáveis POST. Isso teria funcionado , mas por razões políticas eu não pude fazer isso.)
É possível tornar a página dentro do IFRAME mais confiável: se a página interna enviar um cabeçalho P3P com uma política de privacidade aceitável para o IE, os cookies serão aceitos .
Como resolver
Crie uma política p3p
Um bom ponto de partida é o tutorial do W3C . Eu passei por isso, baixei o IBM Privacy Policy Editor e lá criei uma representação da política de privacidade e dei um nome para fazer referência a ela (aqui estava policy1
).
NOTA : neste momento, você precisa descobrir se o seu site tem uma política de privacidade e, se não, criá-lo - se ele coleta dados do usuário, que tipo de dados, o que faz com ele, quem tem acesso a ele, etc. Você precisa encontrar essas informações e pensar sobre isso. Tocar algumas tags não é suficiente. Esta etapa não pode ser realizada exclusivamente em software e pode ser altamente política (por exemplo, "devemos vender nossas estatísticas de cliques?").
(por exemplo, "o site é operado pela ACME Ltd., ele usa identificadores anônimos por sessão para sua operação, coleta dados do usuário apenas se explicitamente permitido e apenas para os seguintes fins, os dados são armazenados apenas pelo tempo necessário, apenas nossa empresa tem acesso a ele, etc. etc. ").
(Ao editar com esta ferramenta, é possível visualizar erros / omissões na política. Também é muito útil a guia "Política HTML": na parte inferior, há uma "Avaliação da política" - uma verificação rápida se a política será bloqueada. pelas configurações padrão do IE)
O Editor exporta para um arquivo .p3p, que é uma representação XML da política acima. Além disso, ele pode exportar uma "versão compacta" desta política.
Link para a política
Em seguida, http://example.com/w3c/p3p.xml
era necessário um arquivo de referência de política ( ) (um índice de políticas de privacidade que o site usa):
<META>
<POLICY-REFERENCES>
<POLICY-REF about="/w3c/example-com.p3p#policy1">
<INCLUDE>/</INCLUDE>
<COOKIE-INCLUDE/>
</POLICY-REF>
</POLICY-REFERENCES>
</META>
O <INCLUDE>
mostra todos os URIs que usarão essa política (no meu caso, o site inteiro). O arquivo de política que eu exportei do Editor foi carregado parahttp://example.com/w3c/example-com.p3p
Envie o cabeçalho compacto com respostas
Eu configurei o servidor da web em example.com para enviar o cabeçalho compacto com respostas, assim:
HTTP/1.1 200 OK
P3P: policyref="/w3c/p3p.xml", CP="IDC DSP COR IVAi IVDi OUR TST"
// ... other headers and content
policyref
é um URI relativo ao arquivo de referência de política (que por sua vez faz referência às políticas de privacidade), CP
é a representação compacta da política. Observe que a combinação de cabeçalhos P3P no exemplo pode não ser aplicável em seu site específico; seus cabeçalhos P3P DEVEM representar verdadeiramente sua própria política de privacidade!
Lucro!
Nessa configuração, o Evil Eye não aparece, os cookies são salvos mesmo no IFRAME e o aplicativo funciona.
Edit: O que NÃO fazer, a menos que você goste de se defender de ações judiciais
Várias pessoas sugeriram "basta colocar algumas tags no cabeçalho do P3P, até que o Evil Eye desista".
As tags não são apenas um monte de bits, elas têm significados do mundo real e seu uso dá a você responsabilidades do mundo real !
Por exemplo, fingir que você nunca coleta dados do usuário pode deixar o navegador feliz, mas se você realmente coletar dados do usuário, o P3P estará em conflito com a realidade. Puro e simples, você está mentindo de propósito para seus usuários , e isso pode ser um comportamento criminoso em alguns países. Como em "vá para a cadeia, não receba US $ 200".
Alguns exemplos ( consulte o p3pwriter para obter o conjunto completo de tags ):
- NOI : "O site não coleta dados identificados." (assim que houver personalização, login ou coleta de dados (***** Analytics, alguém?), você deverá reconhecê-lo em seu P3P)
- STP : As informações são retidas para atender ao objetivo declarado. Isso requer que as informações sejam descartadas o mais rápido possível. Os sites DEVEM ter uma política de retenção que estabeleça um cronograma de destruição. A política de retenção DEVE ser incluída ou vinculada à política de privacidade legível por humanos do site. "(Por isso, se você enviar,
STP
mas não tiver uma política de retenção, poderá estar cometendo uma fraude. Quão legal é isso? De maneira alguma.)
Não sou advogado, mas não estou disposto a ir a tribunal para ver se o cabeçalho do P3P é realmente legalmente vinculativo ou se você pode prometer algo aos usuários sem realmente querer honrar suas promessas.