Как обмениваться сеансами между 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 также будет вариантом
Ответы
Ответ 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
Это очень простой и масштабируемый способ выполнения сеансов и будет работать практически с любым языком/сервером.
Ответ 4
http://cz.php.net/manual/en/function.session-set-save-handler.php
http://support.microsoft.com/kb/317604
Вы можете писать PHP-сессии в MsSQL и настраивать .NET на использование MsSQL в качестве бэкэнд для сеансов.
Ответ 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, используемого для хранения сеанса.
С.