2012-02-11 4 views
0

У меня есть два php-приложения на моем локальном сервере Wamp. оба приложения используют один и тот же механизм для проверки подлинности, сохраняя логин в сеансах. моя проблема заключается в том, что я могу войти в систему в одном приложении, а другой - автоматически, если я откроюсь в том же браузере. при проверке входа в систему используется один и тот же php-код (я копировал из одного приложения в другое).Использование сеанса для аутентификации в PHP

моя забота заключается в том, как два приложения используют один и тот же сеанс на сервере Wamp? что я делаю неправильно?

благодарит заранее.

+0

ли они на том же домене? – Grexis

+0

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

+0

@ Grexis да приложения находятся в одном домене. мой локальный сервер, чтобы они шли как. app1 является http: // localhost/App1, а другой как http: // localhost/App2 – Rifky

ответ

1

Приложения, вероятно, работают в одном домене, например. http://localhost/app1 и http://localhost/app2. По умолчанию PHP-сессия cookie действительна для всего домена, поэтому, естественно, оба приложения совместно используют cookie сеанса. Вот что вы можете сделать:

  • Использовать имена разные куки сессии для любого приложения (см http://www.php.net/manual/en/function.session-name.php для того, как это сделать)
  • запускать приложения на разных доменах (или поддомены); вы можете имитировать это локально, добавляя поддельные домены в ваш файл hosts и запуская оба приложения на разных Apache VHosts (или даже на том же VHost, но тогда оба приложения будут доступны на обоих псевдодоменах)
  • Ограничить путь на который имеет cookie сессии (см. http://www.php.net/manual/en/function.session-set-cookie-params.php).
1

Сеансы используют файлы cookie (по умолчанию PHPSESSID) для хранения ключа сеанса в браузере.

Поскольку ваши приложения находятся в одном домене localhost, ваш браузер отправляет одинаковый идентификатор сеанса в оба приложения.

1

Более чем вероятно, что это вызвано тем, что оба приложения обслуживаются доменом localhost (и, вероятно, тем же именем cookie). Поскольку приложения имеют один и тот же сервер аутентификации, имеет смысл, что они будут вести себя одинаково.

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

Другой временное локальное решение будет для использования вашего файла hosts для имитации отдельных доменов в вашей среде разработки.

+0

PLS объясняет добавление уникального токена аутентификации. – Rifky

+1

Возможно, когда ваше приложение загружается, вы устанавливаете константу в уникальную строку, такую ​​как md5 («Я ношу грязные носки моего отца»); Когда пользователь успешно войдет в систему, добавьте эту строку в файл cookie auth. Когда вы проверяете, зарегистрирован ли пользователь, сравните строку в приложении с строкой в ​​файле cookie, чтобы убедиться, что она совпадает. –

0

Ключ сеанса хранится в файлах cookie браузера. Браузер сохраняет файлы cookie для данного домена. Поэтому я думаю, что оба ваших приложения работают в одном домене (localhost?). Если это так, вы должны отделить их, чтобы они работали.

Также вы можете сохранять отдельные файлы сессий в разных местах с помощью session_save_path() function в одном из приложений

Смежные вопросы