Могу ли я войти в ASP.NET (с проверкой подлинности с помощью форм), а затем перенести этот «логин» в приложение PHP? - PullRequest
1 голос
/ 07 марта 2011

Наш веб-сайт работает на ASP.NET v4, и пользователи входят в систему проверки подлинности с помощью форм пользователя.

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

Мы хотели бы, чтобы пользователи заходили на наш сайт ASP.NET, а затем переходили на сайт PHP.Сайт PHP должен заметить, что пользователи вошли в систему.Поэтому нам, вероятно, нужно передать cookie-файл ASP.NET SessionID и каким-то образом использовать его, чтобы проверить, авторизован ли пользователь.

Это звучит реально?Или я лаю не на том дереве?

Ответы [ 4 ]

2 голосов
/ 07 марта 2011

Это будет работать до тех пор, пока информация о вашем сеансе хранится в базе данных, а не в плоском файле (что является PHP-значением по умолчанию).По сути, PHP-скрипт отправляет идентификатор сеанса через cookie (точно так же, как ASP), а затем PHP-скрипт ищет соответствующую информацию о сеансе в базе данных, чтобы получить информацию о пользователе (например, имя пользователя, привилегии и т. Д.) Длясделайте свое дело.

Если вы не используете сеансы, управляемые базой данных, то все становится намного сложнее, поскольку маловероятно, что ASP и PHP сохранят информацию о своих сеансах в совместимом формате плоских файлов.Лучше всего в этой ситуации добавить свой собственный дополнительный слой поверх хранилища сеанса.Например, когда пользователь вошел в систему на стороне ASP, имейте некоторую базовую информацию, которую вам нужно знать о сохранении пользователя в базе данных (опять же, и ASP и PHP могут получить к нему доступ), а затем напишите уникальный ключ дляпеченье.Попросите PHP прочитать cookie самостоятельно и найти соответствующую информацию в базе данных.По сути, это воссоздает базовую версию сеансов, поэтому было бы лучше сначала переключиться на сеансы на основе базы данных, но это может быть единственной доступной вам опцией, в зависимости от конкретных обстоятельств.

2 голосов
/ 07 марта 2011

Это, безусловно, возможно, но вам нужно грязное кодирование , чтобы сделать.

Фактически и ASP.NET, и PHP Session s создают программный уровень, который скрывает механизмы, используемые для обработки и проверки сеансов.

Вы можете просто определить общий cookie-файл между двумя приложениями (убедитесь, что вы подписали его или сохраните в общей БД), а затем использовать собственную настраиваемую логику для связи сеанса ASP.NET с PHP.

База данных - отличный вариант. Я бы порекомендовал вам определить собственный класс диспетчера сеансов в Web.config и сделать так, чтобы он записывал данные сеанса в общую БД, откуда будет загружаться PHP.

Но я не знаю, как написать собственный менеджер сессий PHP. Вы можете использовать пользовательский код PHP на странице init для инициализации сеанса на основе данных, найденных в БД.

Итак, ваше заявление будет состоять из трех вещей:

  • ASP.NET part
  • PHP part
  • Общая база данных

Простой сценарий использования:

  1. Пользователь выполняет вход в ASP.NET
  2. ASP.NET проверяет логин, устанавливает cookie с известным именем и вставляет в базу данных строку со значением cookie (и, возможно, IP-адрес для безопасности)
  3. Пользователь перемещается по сайту PHP, передающему cookie
  4. PHP проверяет cookie по таблице и, возможно, инициализирует собственный сеанс

Более сложные конструкции могут на самом деле обмениваться данными сеанса между PHP и ASP.NET с использованием одной таблицы базы данных И без локальной памяти.

1 голос
/ 07 марта 2011

Здесь есть хорошее обсуждение этого вопроса:

Обнаружение просроченного сеанса asp.net от php

Несколько вариантов, которые они предлагают:

1) Используйте встроенное в ASP.NET состояние сеанса и сохраните сеанс в SQL Server, затем, считывая идентификатор сеанса из файла cookie в PHP, отправьте запрос SQL Server, чтобы узнать, жив ли сеанс.

2) Я думаю, что они говорят: захватите файл cookie ASP.NET Auth в PHP, затем сделайте запрос к сайту ASP.NET (в PHP-коде сервера), используя его, и проверьте, если вы получаете например, редирект для входа в систему. Я не уверен, что это сработает, потому что MAC и IP, вероятно, свернуты в куки-файле ASP.NET Auth, но это вроде как гладко, если не небезопасно.

1 голос
/ 07 марта 2011

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

Это будет работать аналогично системе единого входа (SSO).

Я забыл добавить ссылку: http://www.php.net/manual/en/function.session-set-save-handler.php Эта функция позволяет вам определять собственные обработчики сеансов в PHP. Вопрос только в том, сколько вы можете изменить свое новое купленное приложение, чтобы соответствовать вашей архитектуре.

...