Hace unos días, un sitio web corporativo contenía un sistema de atención al cliente. Debido a que el sitio web era un espacio alquilado, no era suficiente para almacenar el sistema del cliente, por lo que configuramos otro servidor para unificar el nombre de dominio. del otro servidor es el mismo que el original) El nombre de dominio era demasiado diferente), así que incluí este sistema de cliente en el sitio web original usando un marco, pero encontré algunos problemas. Debido a operaciones entre dominios, el problema de la pérdida de sesión ocurrió después de que el usuario del sistema del cliente inició sesión, lo que me molestó durante todo un día. También publiqué aquí para solicitar soluciones. net/dispbbs.asp ?boardID=10&ID=167628&page=3. Después de buscar información de muchas maneras, finalmente resolví este problema a través de mi propio análisis y experimentos. Hoy vi a alguien pidiendo un programa, así que escribí esta publicación para que todos la compartan.
Primero explique el principio:
El sistema reconoce el alcance de cada programa. En términos generales, un IE tiene por defecto un alcance de programa.
Debido a que el marco tiene contenido entre dominios, primero utiliza de forma predeterminada el alcance del programa marco en sí, por lo que no se puede confirmar el alcance del programa dentro del marco.
Para que este IE esté predeterminado en el alcance del programa dentro del marco, utilicé múltiples saltos.
Primero, salga de este marco e ingrese a una página de sitio web sin marco que requiere un valor de sesión (llámela página del servidor B), genere una sesión en esta página para que el sistema pueda generar automáticamente un ID de sesión y luego regrese a la página enmarcada Debido a que el sistema ha generado una ID de sesión para este IE, siempre que este IE no esté cerrado, el sistema siempre piensa que este IE está dentro del alcance de este programa. puede sobrevivir en esta identificación.
Esto logra el propósito de engañar al sistema.
Una cosa más que agregar, el segundo salto usa un método diferente. La razón es que necesito descartar la información fuera del marco y guardar la información dentro del marco.
Los diferentes métodos de salto descartarán o guardarán la información antes del salto.
Implementación del programa:
Archivo 1:
Archivo de marco: index.htm (ejecutándose en el servidor A)
<html>
<cabeza>
<meta HTTP-EQUIV=Tipo de contenido CONTENT=text/html charset=gb2312>
<title>Industria de puertas Qihao</title>
</cabeza>
<filas del conjunto de marcos=1,* borde=0 borde de marco=0>
<nombre del marco=winBackLoad scrolling=no noresize target=mainweb1 src=default_top.htm>
<nombre del marco=mainweb1 src=http://www.serverB.com/index.asp scrolling=auto>
<sin marcos>
<cuerpo>
<p>Esta página utiliza marcos, pero su navegador no los admite. </p>
</cuerpo>
</noframes>
</conjunto de marcos>
</html>
Archivo 2: index.asp (ejecutándose en el servidor B, funciones para saltar y generar ID de sesión)
<guión>
if (ubicación.superior! == auto.ubicación) {
top.ubicación=self.ubicación;
}
// El propósito de este JS es ejecutarse fuera del marco.
</script>
<%
si sesión (xm2) = entonces
sesión(xm2)=eee
'El propósito de la oración anterior es simplemente usar la sesión, dejar que el sistema genere un ID de sesión para este IE y determinar si se ha saltado para evitar causar un bucle infinito.
%>
<META HTTP-EQUIV=REFRESH CONTENT=0;URL='http://www.serverA.com/index.htm'>
<%
, La oración anterior es para regresar al cuadro, nota: use solo el método de salto anterior, no use el siguiente método de salto.
demás
Respuesta.Redireccionamiento index2.asp
'¡La oración anterior es el verdadero salto para ejecutar el programa en el servidor B! Nota: ¡Solo puedes saltar de esta manera!
terminar si%>
Después del salto anterior, este IE ya tiene el ID de sesión en el servidor B. En otras palabras, aunque el marco se ejecuta en el marco principal del servidor A, puede garantizar que la sesión en el servidor B no se pierda, logrando dominios cruzados. Operación.