Há poucos dias, um site corporativo continha um sistema de atendimento ao cliente. Como o site era um espaço alugado, não era suficiente para armazenar o sistema do cliente, então montamos outro servidor para unificar o nome de domínio (o nome de domínio). do outro servidor é igual ao original) O nome de domínio era muito diferente), então incluí esse sistema do cliente no site original usando uma estrutura, mas encontrei alguns problemas. Para operações entre domínios, o problema de perda de sessão ocorreu após o login do usuário do sistema cliente, o que me incomodou por um dia inteiro. Também postei aqui para pedir uma solução. net/dispbbs.asp ?boardID=10&ID=167628&page=3. Depois de buscar informações de várias maneiras, finalmente resolvi esse problema após minhas próprias análises e experimentos. Hoje vi alguém pedindo o programa, então escrevi este post para que todos possam compartilhar.
Primeiro explique o princípio:
O sistema reconhece o escopo de cada programa. De modo geral, um IE assume como padrão um escopo de programa.
Como o quadro tem conteúdo entre domínios, ele primeiro assume como padrão o âmbito do programa-quadro em si, de modo que o âmbito do programa dentro do quadro não pode ser confirmado.
Para tornar esse IE padrão para o escopo do programa dentro do quadro, usei vários saltos.
Primeiro, saia deste quadro e entre em uma página de site sem moldura que requer um valor de sessão (chame-a de página do servidor B) e gere uma sessão nesta página para que o sistema possa gerar automaticamente um ID de sessão e, em seguida, volte para a página emoldurada Como o sistema gerou um ID de sessão para este IE, enquanto este IE não estiver fechado, o sistema sempre pensa que este IE está dentro do escopo deste programa. pode sobreviver neste ID.
Isso atinge o objetivo de enganar o sistema.
Mais uma coisa a acrescentar, o segundo salto usa um método diferente porque preciso descartar as informações fora do quadro e salvar as informações dentro do quadro.
Diferentes métodos de salto descartarão ou salvarão as informações antes do salto.
Implementação do programa:
Arquivo 1:
Arquivo de estrutura: index.htm (em execução no servidor A)
<html>
<cabeça>
<meta HTTP-EQUIV=Tipo de conteúdo CONTENT=text/html charset=gb2312>
<title>Indústria de portas Qihao</title>
</head>
<frameset rows=1,* border=0 frameborder=0>
<frame name=winBackLoad scrolling=noresize target=mainweb1 src=default_top.htm>
<nome do quadro=mainweb1 src=http://www.serverB.com/index.asp scrolling=auto>
<sem quadros>
<corpo>
<p>Esta página usa frames, mas seu navegador não os suporta. </p>
</body>
</noframes>
</frameset>
</html>
Arquivo 2: index.asp (executando no servidor B, funções para pular e gerar sessionID)
<roteiro>
if (localização superior! == self.localização) {
top.location=self.location;
}
//O objetivo deste JS é rodar fora do frame
</script>
<%
se sessão(xm2)=então
sessão(xm2)=eee
'O objetivo da frase acima é apenas usar a sessão, deixar o sistema gerar um ID de sessão para este IE e determinar se ele foi saltado para evitar causar um loop infinito.
%>
<META HTTP-EQUIV=REFRESH CONTENT=0;URL='http://www.serverA.com/index.htm'>
<%
, a frase acima deve retornar ao quadro, observe: use apenas o método de salto acima, não use o método de salto a seguir.
outro
Resposta.Redirect index2.asp
'A frase acima é o verdadeiro salto para executar o programa no servidor B! Nota: Você só pode pular desta forma!
terminar se%>
Após o salto acima, este IE já possui o ID da sessão no servidor B. Em outras palavras, embora o quadro esteja rodando no quadro principal do servidor A, ele pode garantir que a sessão no servidor B não seja perdida, alcançando domínio cruzado operação.