Несмотря на все усилия Microsoft по обеспечению легкого сосуществования ASP и ASP.NET, одна область остается камнем преткновения ... состояние сеанса. К счастью, преимущества обновленного управления состоянием сеанса ASP.NET значительно перевешивают неудобство, связанное с невозможностью передачи «классической» информации сеанса в .NET. К сожалению, нет простого решения; Максимум, что я могу предложить, - это простой способ решения проблемы.
Пытаясь найти подходящее разрешение, я наткнулся на два хороших варианта, о которых стоит упомянуть. Первый включает анализ информации о сеансе в скрытых полях формы на промежуточной странице «Классик», а затем отправку страницы на промежуточную страницу .NET, которая загружает поля формы в состояние сеанса. Это хорошее, простое решение, однако оно не работает в обоих направлениях. В .NET вы не можете указать страницу, которую вы отправляете. Каждая страница должна PostBack для себя.
Второй вариант, вероятно, ближе к реальному решению, чем к обходному пути. Билли Юэн из Microsoft разработал эффективное решение. Код элегантный, интеграция кажется бесшовной, но я не смог заставить его работать в моей системе (помните, я говорил, что простого решения не было, совсем не было решения). Если это решение работает для вас, отлично! Вам не понадобится мой код, и вы с радостью будете передавать информацию о сеансе из «Классики» в .NET, как будто она выходит из моды, спасибо, что заглянули.
Хорошо, если вы все еще читаете, позвольте мне кратко описать созданный мной обходной путь. Требуется база данных, но не важно, какой тип базы данных (хотя код написан для SQL Server). Когда страница (исходная страница) хочет перенаправить на другую страницу (целевую страницу), которая использует другую версию ASP, она вызывает промежуточную страницу. Исходная промежуточная страница берет каждую переменную сеанса и добавляет ее в базу данных вместе с глобальным уникальным идентификатором (GUID). Поскольку "Classic" и .NET используют разные форматы SessionID, невозможно использовать SessionID, следовательно, использовать GUID. Исходная промежуточная страница затем передает GUID на целевую промежуточную страницу через переменную Querystring. Промежуточная страница назначения получает информацию о сеансе из базы данных, очищает ее после себя и затем перенаправляет на страницу назначения. Это похоже на первый обходной путь, но поддерживает передачу состояния в обоих направлениях.
Использование кода
Установка
- Запустите SQL-запрос в «ASPSessionState.sql» в базе данных, в которой будет храниться временная информация о сеансе.
- Скопируйте файлы .asp и .aspx. * (SessionTransfer.aspx и SessionTransfer.aspx.cs) в папку на своем веб-сайте.
- Обновить информацию об объекте соединения в файлах "SessionTransfer.asp" и "SessionTransfer.aspx.cs". Он расположен в трех местах в каждом файле (извините, что не объединил информацию о соединении).
- Скомпилируйте файлы aspx.
- Для работы .asp и .aspx. * Все файлы должны находиться в одной папке.
Использование
Для использования в гиперссылке (тег привязки) или Response.Redirect установите целевой URL-адрес одним из следующих:
со страницы ASP "Classic":
SessionTransfer.asp?dir=2aspx&url=<asp_dotnet_url>
Со страницы ASP.NET:
SessionTransfer.aspx?dir=2asp&url=<asp_classic_url>
Код передаст информацию о сеансе и перенаправит пользователя на URL, указанный с помощью или.
Скачать
Вы можете скачать код с здесь : session_transfer.zip (4,6 КБ).