Как обмениваться сеансами между PHP и ASP.net?

Моя компания приняла какое-то старое приложение php. Из-за нашего предпочтения ASP.net и отсутствия какой-либо документации от предыдущего разработчика, мы не хотим тратить много ресурсов на разработку в PHP. Для реализации новых функций мы создадим приложение Asp.net, которое будет выглядеть так же, как и у пользователя. Мы хотим разработать своеобразное «совместное» веб-приложение. Поэтому мы должны обмениваться сеансами между PHP и проектом APAP APAP, потому что есть работа с существующей базой данных MySQL.

(например, ссылка «A» направляется на сайт PHP, а ссылка «B» направляется в приложение asp.net)

Как мы можем делиться сеансом между PHP и приложением asp.net?

И есть ли у кого-нибудь намек на эту «сосуществовающую» вещь, которая может быть полезна в развитии?

Изменить : IIS 6 будет нашим целевым сервером, хотя IIS 7.5 также будет вариантом

Я хочу сказать вам, как я это сделал.

Оба приложения обращаются к базе данных MySQL и получают доступ к таблице «сеанс», которая состоит из указателя, идентификатора пользователя и подтвержденияString (я предполагаю, что я каким-то образом закодировал IDUser) и дату.

Сессии запускаются только приложением PHP (из-за того, что приложение PHP все еще является основным приложением). Новый сеанс приведет к новой записи в таблице журналов. Каждая ссылка в приложении PHP, которая ссылается на приложение ASP.Net, содержит GET-параметры, содержащие Guid и т. Д.

Приложение ASP.net проверяет параметры GET и устанавливает IDUser в сеансе ASP.Net, если GET-Parameters указывают на существующий сеанс.

Ссылки, обращенные к PHP-приложению, используют тот же метод.

(Есть и другие вещи, которые нужно учитывать, например, тайм-ауты или выход из системы, но это также можно обрабатывать)

В целом, я бы сказал, что мой подход полезен, и ни один из клиентов не жаловался со времени развертывания (более 1 года назад)

Я не думаю, что можно обмениваться сеансами между PHP и ASP.NET.

Однако это может быть возможно с помощью страницы PHP, которая читает содержимое сеанса, сохраняет их в скрытых полях, а затем вызывает страницу ASP.NET, которая будет читать эти поля и загружать их в сеанс ASP.NET.

Теоретически это возможно.

Это старый вопрос, но я не думал, что какие-либо из текущих ответов были полными.

Во-первых, я считаю, что неплохо хранить данные сеанса на сервере базы данных, таком как mysql или SQL Server. БД – это ценный ресурс, и на самом деле нет причин избивать его только для данных сеанса.

Если вы собираетесь хранить сеанс в такой базе данных, есть «лучшие» способы сделать это, например, убедиться, что данные сеанса находятся на собственном независимом диске и т. Д. … но, честно говоря, я все еще чувствую, что это ошибки и ограничит вашу масштабируемость.

Для хранения сеанса вы хотите пойти с простым хранилищем ключей / значений, и, на мой взгляд, вы не можете победить memcached (хотя мне также повезло с redis + nodejs).

У memcached есть клиенты, доступные практически для всех языков на земле: http://code.google.com/p/memcached/wiki/Clients

Таким образом, в основном все, что вам нужно сделать при использовании memcached, это генерировать псевдослучайный токен для ключа и делать memcached.set. Затем сохраните этот ключ в файле cookie, который называется session-id или что-то в этом роде.

Файл cookie session-id может быть прочитан с любого языка сервера .net, php, python и т. Д. – и значение сеанса, полученное с помощью простого memcached.get.

Ознакомьтесь с документами memcached: http://code.google.com/p/memcached/wiki/NewStart.

Это очень простой и масштабируемый способ делать сеансы и будет работать практически с любым языком / сервером.

http://cz.php.net/manual/en/function.session-set-save-handler.php
http://support.microsoft.com/kb/317604

Вы можете писать сеансы PHP в MsSQL и настраивать .NET на использование MsSQL в качестве бэкэнд для сеансов.

Не ахти какое дело.
Ваше приложение asp должно выполнить три простых элемента:

  • Получить файл cookie sessionid с клиента
  • найдите sess_<id> в пути сохранения сеанса PHP
  • реализовать функции сериализации / несериализации PHP для чтения / записи данных сеанса.

Более удобный способ, чем просто взломать механизмы хранения сеансов с обеих сторон, – это настроить поставщика OpenId и подключить пользователей OpenId к приложениям asp.net и php.

Для этого есть много существующего кода. Это было бы более элегантно и подвержено ошибкам, чем решения на низком уровне. В качестве бонуса вы могли бы использовать встроенный идентификатор OpenId в остальных ваших корпоративных приложениях и стать героем компании.

См .: Использование OpenID для веб-сайтов .NET / Windows и PHP / Linux / Apache.

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

По умолчанию PHP записывает свои данные сеанса как сериализованный массив в файл, названный в соответствии с сеансом. Сеанс обычно определяется файлом cookie с именем PHPSESSID.

Поэтому в PHP для ручного чтения сессии:

 $imported_session=unserialize(file_get_contents(session_save_path() . '/' . $_COOKIE[session_name()])); 

Формат файла очень прост и прост для синтаксического анализа.

Однако довольно легко реализовать собственный обработчик сеанса PHP для записи файлов в любом формате / в любое хранилище, которое вам нравится (посмотрите на автоматическое добавление для того, как связать обновленный код с каждой страницей, не переписывая каждый). Или измените имя файла cookie, используемого для хранения сеанса.

C.