Обработка сессий между разными портами - PullRequest
1 голос
/ 17 января 2012

Наша проблема в том, что мы используем один сервер, который прослушивает порт 80 и порт 8080, где порты соответствуют базе данных и веб-сайту соответственно. Причина такого разделения связана с техническими проблемами (их невозможно объединить). Сервер базы данных может обрабатывать PHP, но не последний.

Мы пытаемся реализовать сессии с использованием PHP-скриптов База данных, содержащая пользователей, является базой данных MySQL, а сеансы предназначены для функциональности входа пользователей. Мы используем Ajax-функцию jQuery для получения диалогового окна входа в систему, которое закодировано на сервере базы данных.

Если мы протестируем диалоговое окно входа в систему на сервере базы данных, все будет хорошо. Мы получаем один и тот же идентификатор сессии каждый раз. Однако, когда мы пытаемся использовать его на сервере сайта (после загрузки с помощью Ajax-вызова), мы получаем новый идентификатор сеанса для каждого запроса (т. Е. Каждый раз, когда мы что-то делаем)! Поэтому мы не можем использовать сеансы для отслеживания событий, поскольку мы не можем сохранить идентификатор сеанса, связанный с «активным сеансом» (это звучало не так хорошо, как я надеялся).

Мы не уверены в том, что здесь происходит, но подозреваем, что сервер базы данных воспринимает каждый запрос как «нового пользователя». Имеет смысл?

Как мы можем решить эту проблему?

Заранее спасибо! : -)

Sidenote: Не уверен, что это актуально, но мы видели много тем, которые спрашивают об этом: Да, мы начали сеанс! : -)

1 Ответ

0 голосов
/ 17 января 2012

Pecka, если я правильно вас понимаю, вся аутентификация происходит на "сервере базы данных", верно?Если это так, вызов AJAX возвращает только ответ серверов базы данных, а не cookie, который он обычно использует для помощи в отслеживании вашего сеанса.

Дважды проверьте меня, просматривая HTTP-заголовки, которыми обмениваются во время вызова AJAX, но я думаю, что вы получаете только видимый контент, возвращаемый «Сервером базы данных».

Чтобы проверить заголовки, вы можете использовать что-то вроде Firefox с надстройкой Live Headers.https://addons.mozilla.org/en-US/firefox/addon/live-http-headers/

Если я упустил свое понимание, отправьте ответ, и я сделаю еще один снимок.


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

Вы можете сделать так, чтобы ваш сервер базы данных передавал зашифрованный токен в ответе, что-то вроде этого:

if( [ENTER CRITERIA FOR CHECKING LOGIN HERE ]) {
    $hashSalt = 'PleasePr0tectM3';
    $token = md5($_POST['username' .date('mdY') .$hashSalt);
    echo $token;
 }

Это должно быть что-то, что веб-сервер также может рассчитатьна его конце, основанном только на данных ввода.Затем веб-сервер создает тот же хэш, и, если они совпадают, веб-сервер выдает им учетные данные сеанса.

Это ужасно, но это может сработать.

Дайте мне знать.:)

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