Во-первых, пожалуйста, не упускайте этот вопрос – я знаю, что это уродливая ситуация, но эй, реальная жизнь некрасивая.
Я разрабатываю дополнительный раздел для веб-приложения, написанного на 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 , из которых два являются общими:
Сценарий 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 🙂