Подтвердить что ты не робот

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

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

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

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

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

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

4b9b3361

Ответ 1

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

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

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

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

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

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

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

Ответ 2

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

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

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

Ответ 3

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

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

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

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

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

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

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

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

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

Ответ 5

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

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

Ответ 6

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

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

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

Ответ 7

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

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

Итак, в PHP для ручного чтения сессии:

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

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

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

С.