Моя компания приняла какое-то старое приложение 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 должно выполнить три простых элемента:
sess_<id>
в пути сохранения сеанса 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.