Обнаружение просроченного сеанса asp.net от php - PullRequest
0 голосов
/ 23 февраля 2011

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

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

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

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

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

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

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

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

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

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

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

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

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

- РЕДАКТИРОВАТЬ 2 - Итак, способ javascript вполне соответствует моим потребностям - очевидно, это небезопасный способ ведения дел, но, к счастью, в этом случае все нормально, поскольку это просто приложение, используемое в интрасети (а неаккуратный способ аутентификации пользователей ужасен в любом случае.)

Ответы [ 3 ]

3 голосов
/ 23 февраля 2011

Есть несколько способов здесь. Во-первых, одни только cookie-файлы мало что дадут, потому что сеанс может быть прерван в ASP.net, даже если cookie все еще жив.

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

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

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

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

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

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

Надеюсь, что вы начали.

1 голос
/ 23 февраля 2011

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

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

Woot:)

1 голос
/ 23 февраля 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...