Странное поведение с $_SESSION на 2 удаленных серверах

#php #session

#php #сессия

Вопрос:

Это моя ситуация,
у меня есть 2 сервера, server_1 на которых размещена страница, server_2 веб-приложение. Вы можете войти в веб-приложение server_2 со страницы server_1 , выполнив post-вызов, передающий имя пользователя и зашифрованный пароль, а также параметр, который определяет, заходите ли вы с server_1 страницы или непосредственно из формы входа в веб-приложение на server_2 .
При входе в систему я использую много $_SESSION переменных для хранения информации о текущем зарегистрированном пользователе и много вызовов ajax непосредственно в php-файл ( req.php ). Теперь, если я вхожу в систему из формы веб-приложения на server_2 , у меня нет проблем, но если я вхожу из server_1 when it’s time to make и вызываю ajax, я не могу правильно получить значение сеанса (только из php кода ajax, остальная часть приложения работает хорошо).
Существует еще одно странное поведение при входе из server_1 . Пример:

User_1 войдите в систему из server_1 , после этого вы используете веб-приложение, закрываете вкладку и возвращаетесь на server_1 страницу, выходите из системы, входите с помощью user_2 , нажимаете динамическую ссылку для входа в server_2 , и веб-приложение создает тот же идентификатор сеанса (я вижу файл ses_randomid в каталоге php), что и предыдущий! Итак, вы украли сеанс другого пользователя…

Я использую в index.php и req.php (файл, используемый для обработки вызова ajax):

 session_name("kreker");
session_start();
  

Когда я отлаживаю вызов из веб-приложения на req.php $_SESSION переменная также не не устанавливается, если я вызываю session_start() , и это происходит только в том случае, если вы входите из server_1 . Если вы входите в систему напрямую из веб-приложения, переменная устанавливается!

Пытался вызвать ajax при событии закрытия браузера для принудительного уничтожения сеанса, работает, но я думаю, что это неправильное решение. Я также пробовал с session_regenerate_id() , теперь результаты;

Итак, проблема в том, что я вхожу в систему через POST запрос с другого сервера, сохраняю значение сеанса, закрываю браузер без выхода из системы, вхожу через POST с другими учетными данными, и вы регистрируетесь как предыдущий пользователь! Возможно, это происходит потому, что сеанс server_1 всегда один и тот же? (я имею в виду, что за сеанс вы не закрываете браузер)

Извините, это очень сложно объяснить, надеюсь, вы понимаете

Комментарии:

1. Перед входом пользователя в систему вы должны выполнить session_destroy(), чтобы удалить все его ранее существовавшие сеансы. Вы это делали?

2. Да, но у меня все еще есть проблема, когда я вызываю req.php файл, потому что в этой части сеанс уже запущен, и мне это нужно в этом файле, но если я вызываю session_start(), сеанс не отображается.

3. Я не могу понять часть: «потому что в этой части сеанс уже запущен». Можете ли вы пояснить, почему именно вы не можете вызвать session_destroy() до входа пользователя в систему?

4. Публикация фрагмента кода для соответствующего компонента может помочь.

5. Я могу это вызвать, но это не работает. При входе в систему создается файл для сеанса, при закрытии браузера файл все еще существует на сервере, когда вы меняете имя пользователя с server_1 и login, он использует тот же идентификатор сеанса другого пользователя. Это не создало новый идентификатор, я не понимаю почему. Единственный способ решить эту проблему — принудительно удалить файл сеанса при закрытии браузера с помощью вызова ajax, но я не знаю, правильный ли это способ