2010-03-30 2 views
12

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

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

Как мы можем разделить сеанс между и PHP и ASP.NET приложение?

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

Edit: IIS 6 будет наш целевой сервер, Altough IIS 7.5 также будет вариант

ответ

13

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

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

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

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

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

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

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

+0

спасибо за решение, это именно то, с чем я тоже боролся. – Mana

0

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

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

+0

@Yossarian, конфигурирующий состояние сеанса в MySQL, не совсем поддерживается ASP.NET, поскольку он использует несколько стандартных процедур и, если я не ошибаюсь, он использует объект 'SqlConnection' для подключения к ** SQL Сервер ** задний конец. –

+0

Есть ли причина, по которой вы не можете подключиться к серверу sql из mysql через другой соединитель и прочитать те же данные, что и в SqlConnection? – nothrow

2

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

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

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

0

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

  • ПОЛУЧИТЕ SESSIONID печенье от клиента
  • взгляд на sess_<id> файла в PHP сессии путь сохранения
  • реализовать PHP сериализации/десериализации функции в чтение/запись данных сеанса.
-1

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

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

Таким образом, в PHP вручную читать сессии:

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

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

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

C.

+6

Не могли бы вы объяснить: «О, дорогой, может быть, однажды ты увидишь ошибку своих путей, тем временем ...»? – citronas

0

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

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

См: Using OpenID for both .NET/Windows and PHP/Linux/Apache web sites

2

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

Во-первых, я считаю, что неплохо хранить данные сеанса на сервере базы данных, таком как 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, whatever - и значение сеанса, полученное с помощью простого memcached.get.

Отъезд Memcached документы: http://code.google.com/p/memcached/wiki/NewStart

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

+0

Вместо использования Memcache я могу использовать Microsoft Velocity для связи между PHP и ASP.NET? Будет ли Microsoft Velocity работать с PHP? Если да, насколько хорошо работает Microsoft Velocity с PHP? – user1338998

Смежные вопросы