2012-01-17 3 views
1

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

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

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

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

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

Заранее благодарю! :-)

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

+0

webservers только видят только то, что им отправлено. Это браузер, который решает, когда/когда cookie должен быть отправлен обратно.Каким-то образом решение вашей среды веб-сервера - это два разных домена cookie и не отправляет cookie сессии обратно. –

+0

@MarcB Хорошо, но есть ли способ обойти это? Есть ли что-то, что я могу отправить на сервер базы данных с помощью вызова Ajax? – pecka85

ответ

0

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; 
} 

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

Это некрасиво, но это может сработать.

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

+0

Вы, кажется, правы! :-) Когда я пытаюсь войти в систему (чей код лежит на сервере базы данных), я получаю только ответ от сервера базы данных. Когда я вхожу на страницу веб-сайта, содержащую код с веб-сайта и ящик для входа, я получаю три ответа: 1) «нормальный» ответ со страницы, 2) ответ от Ajax-вызова, сделанный для получения окна входа, и 3) один из jQuery (не имеет значения, он только получает библиотеку). Как мы можем это сделать? EDIT: 1) и 2) получили разные ID – pecka85

+0

. Я вижу, что я, возможно, был неясен в отношении сценариев. Правильно то, что когда я вхожу на сайт, содержащий элементы с веб-сайта (веб-сайт-сервер) и ящика входа (сервер базы данных), я получаю три ответа, описанных выше. Когда я нажимаю «login», запрос отправляется на PHP-скрипт на сервере базы данных, и я получаю только один заголовок, который находится на сервере базы данных. – pecka85

+0

После некоторого обсуждения проекта мы решили перенести наших пользователей на сайт-сервер. Это было не похоже на то, что можно было сделать раньше, но мы, вероятно, нашли способ. Как вы указали, это может быть риск безопасности с использованием хэширования имен пользователей и т. Д., Поэтому этот другой подход поможет нам обеспечить безопасность. Спасибо за помощь и понимание! :-) – pecka85