PHP: MYSQL-совместное использование сессий на другом компьютере - PullRequest
0 голосов
/ 23 августа 2010

У меня есть приложение на компьютере A (solaris.example.com), и те же приложения находятся на компьютере B (rhodes.example.com), эти две машины подключены к одной базе данных MYSQL, на которой есть таблица сеансов. 1001 *

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

У меня вопрос, как мне получить доступ к точному идентификатору сеанса, созданному на компьютере A с компьютера B?

У меня есть эти настройки в моем скрипте инициализации для обеих машин:

ini_set("session.gc_maxlifetime", "288000"); 
ini_set("session.cookie_lifetime", "288000");
ini_set("session.save_handler", "user");  
session_set_cookie_params( 0, "/", ".example.com", false, false);
session_cache_expire(288000);

Проблема, которую я получаю, состоит в том, что машина B продолжает создавать новый сеанс на таблице, и когда я пытаюсь установить идентификатор сеанса на машине B, используя session_id( $_GET["sessId"] ), она переопределяет значение, созданное машиной A.

Вопрос в том, как мне сказать компьютеру B использовать идентификатор сеанса, который создан машиной A, и получить данные из таблицы?

Я думал, что это будет автоматически, так как я позвонил session_set_cookie_params( 0, "/", ".example.com", false, false);

Любая помощь будет фантастической

Ответы [ 2 ]

0 голосов
/ 23 августа 2010

В вашем подходе нет ничего плохого, если предположить, что к обоим компьютерам обращаются с использованием одного и того же имени хоста в URI на стороне клиента.

session_id ($ _GET ["sessId"])

use_trans_id следует по возможности избегать.Значения cookie присутствуют только в $ _REQUEST (в зависимости от параметра ini request_order) или в $ _COOKIE.

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

Использование файлов cookie является гораздо более разумным подходом и значительно упрощает процесс.

Вам следует проверить, действительно ли идентификатор сеанса, созданный на компьютере A, действительно представлен на компьютере B(в виде куки или в URL).Если это так, то происходит что-то очень необычное.

0 голосов
/ 23 августа 2010

Я бы попытался сохранить куки на компьютере пользователя, чтобы я мог легко определить, существует ли его / ее сеанс или нет.Конечно, если пользователь отключил куки, это не сработает.

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

Изменить Я нашел ссылку на SO, возможно, это поможет.

...