Несколько дней назад на корпоративном сайте была система обслуживания клиентов. Поскольку сайт был арендованным, места для хранения системы клиента было недостаточно, поэтому мы установили еще один сервер, чтобы унифицировать доменное имя (доменное имя). другого сервера такой же, как исходный) Доменное имя слишком отличалось), поэтому я включил эту клиентскую систему в исходный веб-сайт с помощью фреймворка, но столкнулся с некоторыми проблемами. Из-за междоменных операций проблема потери сеанса возникла после того, как пользователь системы клиента вошел в систему, что беспокоило меня целый день. Я также написал здесь, чтобы узнать решения. См.: http://bbs.bc-cn. net/dispbbs.asp ?boardID=10&ID=167628&page=3. После поиска информации разными способами я, наконец, решил эту проблему посредством собственного анализа и экспериментов. Сегодня я увидел, что кто-то просит программу, поэтому я написал этот пост, чтобы все могли поделиться им.
Сначала объясните принцип:
Система распознает область действия каждой программы. Вообще говоря, IE по умолчанию использует область действия программы.
Поскольку платформа имеет междоменное содержимое, сначала по умолчанию используется область действия самой программы платформы, поэтому область действия программы внутри платформы не может быть подтверждена.
Чтобы сделать этот IE по умолчанию для области программы внутри фрейма, я использовал несколько переходов.
Сначала выйдите из этого фрейма и войдите на безрамочную страницу веб-сайта, для которой требуется значение сеанса (назовите ее страницей сервера B), и сгенерируйте сеанс на этой странице, чтобы система могла автоматически сгенерировать идентификатор сеанса, а затем вернуться к страница в рамке. Поскольку система сгенерировала идентификатор сеанса для этого IE, до тех пор, пока этот IE не закрыт, система всегда считает, что этот IE находится в области действия этой программы. Таким образом, восстановленное значение сеанса. может выжить в этом ID.
Этим достигается цель обмана системы.
Еще хочу добавить: второй переход использует другой метод. Причина в том, что мне нужно отбросить информацию за пределами кадра и сохранить информацию внутри кадра.
Различные методы прыжка отбрасывают или сохраняют информацию перед прыжком.
Реализация программы:
Файл 1:
Файл фреймворка: index.htm (работает на сервере A)
<html>
<голова>
<meta HTTP-EQUIV=Content-Type CONTENT=text/html charset=gb2312>
<title>Дверная промышленность Qihao</title>
</голова>
<frameset rows=1,* border=0frameborder=0>
<имя фрейма=прокрутка winBackLoad=нет noresize target=mainweb1 src=default_top.htm>
<имя кадра=mainweb1 src=http://www.serverB.com/index.asp прокрутка=авто>
<нофреймы>
<тело>
<p>На этой странице используются фреймы, но ваш браузер их не поддерживает. </p>
</тело>
</нофреймы>
</frameset>
</html>
Файл 2: index.asp (работает на сервере B, функции для перехода и генерации идентификатора сеанса)
<скрипт>
if (top.location !== self.location) {
top.location=self.location;
}
//Цель этого JS — запуск за пределами фрейма
</скрипт>
<%
если сеанс(xm2)= тогда
сеанс (xm2) = эээ
«Цель приведенного выше предложения — просто использовать сеанс, позволить системе сгенерировать идентификатор сеанса для этого IE и определить, был ли он пропущен, чтобы избежать бесконечного цикла.
%>
<META HTTP-EQUIV=REFRESH CONTENT=0;URL='http://www.serverA.com/index.htm'>
<%
, приведенное выше предложение предназначено для возврата в кадр. Обратите внимание: используйте только указанный выше метод перехода, не используйте следующий метод перехода.
еще
Response.Redirect index2.asp
«Приведенное выше предложение — настоящий прыжок к запуску программы на сервере B!» Примечание. Прыгать можно только таким образом!
закончить, если %>
После описанного выше перехода этот IE уже имеет идентификатор сеанса на сервере B. Другими словами, хотя фрейм выполняется в основном фрейме на сервере A, он может гарантировать, что сеанс на сервере B не будет потерян, достигая междоменного доступа. Цель.