Intereting Posts
GET переменные с пробелами – они работают, но это правильно или нормально? Как заполнить выпадающий список HTML со значениями из базы данных Приложение работает в app_dev.php, но не видно, используя app.php open_basedir – как установить для определенного каталога Общие сведения о обратных вызовах сортировки или сравнения функций массива с использованием пользовательских функций Константы класса PHP – общедоступные, частные или защищенные? Исключить ASP.NET из подпапок Как успешно отправить электронное письмо в контактную форму через CodeIgniter? Как передать пользовательские данные в шаблон Как получить массив объектов строки из моего результата в подготовленном запросе mysqli Как настроить cookie HttpOnly на PHP? PHP, переписывание URL-адресов с помощью htaccess и перезапись URL-адреса Microsoft IIS jQuery Загрузка содержимого Div с текущей страницы на другую страницу mysql_fetch_assoc (): предоставленный аргумент не является допустимым ресурсом результатов MySQL Какая структура PHP с Twitter Bootstrap

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

Во-первых, пожалуйста, не упускайте этот вопрос – я знаю, что это уродливая ситуация, но эй, реальная жизнь некрасивая.

Я разрабатываю дополнительный раздел для веб-приложения, написанного на asp.net, но в php – в основном это делается (две части не взаимодействуют друг с другом за пределами базы данных – интеграция в основном просто косметическая).

Единственная проблема, с которой я сталкиваюсь, заключается в обнаружении из php-части, когда истекло время сеанса .net, так что он регистрирует пользователя и перенаправляет его на страницу входа в систему.

Я считаю, что приложение asp.net скомпилировано, но в любом случае мне не разрешено изменять его, поэтому я подумал, что лучше всего сделать, чтобы сделать очень маленькую / простую страницу aspx, которая выводит true или false, что я могу вызов с помощью curl из php (и передача файлов cookie браузера).

Возможно ли это? Я не уверен, как работает защита сеанса на asp.net, например, может ли одно .net-приложение считывать переменные сеанса другого, но если это что-то вроде php, тогда это будет возможно.

mypage.php --curl--> checksession.aspx --| | | <----------- true / false <--------------- 

Таким образом, mypage выдает GET (с файлами cookie из браузера) для проверки, используя curl, checkession просто возвращает true или false (или что-то в этом роде), а mypage перенаправляет на страницу входа в сайт, если это неверно.

Аутентификация для стороны php уже разобрана и разделена на эту проблему.

Так что, действительно, мне нужно знать, есть ли у меня простой файл .aspx, который выполняет эту проверку, и если да, то куда я могу пойти, чтобы узнать, как программировать такую ​​простую страницу? Если это всего лишь строка или три, пожалуйста, сообщите мне, каковы будут эти строки (извините, что я никогда не делал ничего.)

Если это невозможно, то если вы не возражаете, можете ли вы предоставить некоторые альтернативные решения? Благодаря!

— РЕДАКТИРОВАТЬ —

Проведя большую часть дня с этой проблемой, я теперь думаю, что использование php вообще, чтобы обойти это, – плохая идея. На самом деле существует два уровня аутентификации (один из них – обычная запись типа HTTP-запроса / ответа, а также сеанс .net), и я полностью пропустил тот факт, что, очевидно, эти сессии, безусловно, будут подкреплены IP браузера пользователей, который я должен был бы подделать или что-то похожее на завиток, так как это будет работать на сервере.

Поэтому я думаю, что я буду использовать jQuery где-нибудь в заголовке моей страницы, чтобы проверять и перенаправлять по мере необходимости … как-то: /

– EDIT 2 – Хорошо, поэтому способ javascript очень хорошо подходит моим потребностям – очевидно, что это не безопасный способ делать что-то, но, к счастью, в этом случае это нормально, так как это просто приложение, используемое в интрасети (и дрянной путь, которым они аутентифицируют пользователей, в любом случае ужасен.)

Здесь есть несколько способов. Прежде всего, файлы cookie не будут делать многого, потому что сеанс может быть истек в ASP.net, хотя Cookie все еще жив.

ASP.net поддерживает несколько SessionStates , из которых два являются общими:

  1. В процессе – здесь веб-сервер (обычно IIS) содержит все сеансы в памяти. Если служба IIS перезапускается (происходит по умолчанию каждые 24 часа, а не только при перезапуске системы!), Все сеансы стираются (поэтому cookie не помогает). Этот сценарий по умолчанию я считаю и, следовательно, очень распространен в односерверных средах
  2. SQL Server – здесь данные сеанса хранятся в базе данных SQL Server. Это часто не используется.
  3. State Server. Это кажется очень необычным, поэтому я его не замечаю.

Сценарий 2 – ваш лучший выбор, потому что вы можете просто прочитать идентификатор сеанса из файла cookie и запросить базу данных SQL Server для информации о сеансе.

в Сценарии 1 ваш подход правильный: вам нужна помощь из приложения ASP.net, которое может быть страницей .aspx. Сделайте запрос от PHP, проходящего в файле cookie сеанса, и проверьте Session.SessionID и Session.IsNewSession, чтобы убедиться, что ID-соответствия и IsNewSession должны быть ложными. В противном случае ASP.net просто воссоздал новый сеанс.

Возможно, вам придется взаимодействовать с сеансом на странице ASP.net, чтобы активировать его ( Session["PingFromPHP"] = true ), который может помешать работе приложения ASP.net, если ваш ключ (имя в [] -локонах) одно и то же имя.

Если приложение ASP.net скомпилировано, поместите файл .aspx.cs, который служит в качестве кода в папку с именем App_Code , это должно позволить вам запустить его.

Надеюсь, ты начнешь.

Я не знаю php, но если оба приложения находятся в одном домене, вы должны иметь возможность читать cookie сеанса ASP.Net и определять, истек ли он, или нет. Потому что файлы cookie для домена вместо веб-приложения используют его и т. Д. браузер обязательно предоставит cookie с запросом.

Возможно, это неправильный ответ на этот вопрос .. но я нашел довольно легкое (слегка уродливое) решение, которое было действительно удачным.

Я создал страницу с именем checksession.aspx и asp.net (или приложение iis) автоматически перенаправил эту страницу на страницу входа в систему, если срок действия сессии истек. Используя это с curl, я могу теперь просто проверить, получаю ли я 302-редирект, и если это так, я знаю, что сеанс истек.

Woot 🙂