2009-03-24 2 views
1

В настоящее время мы открываем новую страницу aspx с окном window.open. Window.open находится в javascript-функции (openNewWindow()) на текущей странице aspx, которая вызывается при нажатии на ссылку гиперссылки asp.net.Потеря состояния сеанса после закрытия окна, открытого с помощью window.open

Ссылки динамически создаются на странице нашей каркасной структурой, поэтому я бы хотел избежать изменения этой функциональности.

Проблема заключается в том, что когда это новое «дочернее» окно закрыто, состояние сеанса теряется. Я должен упомянуть, что сеанс доступен в дочернем окне, а не в «родительском» окне после закрытия «дочернего» окна.

Похоже, что в другом месте нашего приложения, если вызов open.window добавлен на страницу с помощью вызова ClientScriptManager.RegisterStartupScript на событие clickbase click для элемента управления гиперссылкой (а не вызов функции, которая закодирован в aspx) сессия сохраняется.

Последнее решение будет сложно реализовать в текущем коде кода без значительных изменений и всех регрессионных тестов, которые повлекут за собой.

У кого-нибудь есть идеи, как сохранить состояние сеанса после закрытия дочернего окна.

BTW это происходит в IE7, и наше приложение основано на asp.net 2.0.

Заранее благодарим за проницательные и элегантные решения этой проблемы! ; О)

+0

Прежде всего, добавьте обработчик события Session_OnEnd в global.asax, чтобы поймать, когда и если это происходит на самом деле ... – annakata

+0

(Предполагая, что вы не в настраиваемом режиме сеанса - также есть ваш cookie на основе сеанса?) – annakata

ответ

0

Edit: Упс - извините, я нажимаю ответить вместо комментариев

Я сожалею, что у меня нет ответа, но я испытываю такой же вопрос, хотя он неустойчив и Я не могу успешно его дублировать.

У меня есть клиент, который постоянно перенаправляется на страницу входа в систему после открытия нового окна браузера - для страниц с поддержкой принтера, динамических ссылок. Это происходит при использовании ссылки с целевой установкой на _blank. Я на самом деле это случилось на моей рабочей станции пару раз при создании приложения, но с тех пор я не смог его дублировать.

Благодаря тому, кто может дать некоторое представление/решить эту проблему.

0

Я должен исправить себя (извините, что не могу отредактировать исходный вопрос) и сказать, что управление, запускающее javascript для «window.open», - это кнопка ссылки, а не гиперссылка.

1

IE 7 изменил поведение новых окон. В принципе, каждое окно открывается в собственном процессе. Вкладки все еще открыты в том же процессе.

Это означает, что каждое новое окно будет иметь собственный мешок для печенья. Это означает, что новое окно не имеет автоматически назначенного файла cookie Sesssion_ID. Управление каналом .Net отправит файлы cookie в новое окно. Однако просто открытие нового окна с прямым javascript, вероятно, этого не сделает.

FireFox был таким способом на некоторое время, и Chrome, я считаю, всегда был таким. IE 6 и предыдущее разделенное пространство процессов, даже для нескольких окон, поэтому все было разделено между двумя, что не вызывало головных болей для отладки сайтов строго в IE.

ОБНОВЛЕНИЕ
Here's a link, который описывает проблему в деталях. Вы заметите, что это поведение несколько противоречиво. Причина в том, что иногда IE 7 решает открыть новое окно в своем собственном процессе, а иногда он открывает его в новом.

Существует два реальных решения. Либо прекратите полностью полагаться на сеанс (мой первый выбор, и у меня есть серьезные технические причины для этого), либо вам нужно переключиться на сеанс без cookie.