Подтвердить что ты не робот

Не удается получить доступ к переменным сеанса на разных серверах

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

Но почему-то я думаю, что, возможно, неправильно понял смысл возможностей Memcached о сеансах PHP.

Я думал, что смогу стоять на Apache 1 a.domain.com и создать сеанс, например. $_SESSION['test'] = "This string is saved in the session", а затем перейдите в Apache 2 b.domain.com или c.domain.com и просто продолжите сеанс и введите echo $_SESSION['test'];, и он выведет строку.

Это не так, но я уверен, что мне сказали, что memcached станет отличным инструментом, если у вас есть несколько веб-серверов для совместного использования одного и того же сеанса.

Чем я ошибся?

enter image description here

Кстати. Мы серьезно нуждаемся в полном подробном учебнике или книге, чтобы описать, как настроить сервер, используя php, создание кластеров и т.д. На основе Memcached.

В моем файле php.ini говорится:

session.save_path = "192.168.100.228:11211"

В учебниках рассказывалось, что я не определяю протокол, а ip-адрес был предоставлен серверу Apache 3 - memcached

Вот изображение phpinfo() enter image description here

Домен в session.cookie_domain не называется domain, но это .local. Он был изменен для этого изображения.

EDIT:

Просто для информации. Когда я использую простой PHP-код на основе Memcached - все работает отлично. Но почему-то, когда я пытаюсь сохранить сеанс, сервер memcached не сохраняет этот элемент.

Это работает:

<?php
$m = new Memcached();
$m->addServer('192.168.100.228', 11211);

$m->set('int', 99);
$m->set('string', 'a simple string');
$m->set('array', array(11, 12));
/* expire 'object' key in 5 minutes */
$m->set('object', new stdclass, time() + 300);


var_dump($m->get('int'));
var_dump($m->get('string'));
var_dump($m->get('array'));
var_dump($m->get('object'));
?>

Это не работает

<?php
session_start();
$_SESSION['name'] = "This is a simple string.";
?>

РЕДАКТИРОВАТЬ 2: РЕШЕНИЕ

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

Все, что здесь определено, является правильным, просто убедитесь, что ваш браузер сбрасывает свои файлы cookie, когда вы его просите.. > & Л;

4b9b3361

Ответ 1

По умолчанию (сеанс) файлы cookie являются специфичными для домена, поэтому установите домен cookie в php.ini

session.cookie_domain = ".domain.com"

Также см. здесь Разрешить сеансам php переносить на поддомены

Обязательно перезагрузите веб-сервер и очистите все куки файлы браузера после внесения изменений. Ваш браузер может запутаться, если у вас есть файлы cookie с тем же именем, но с разными субдоменами.

Другие вещи для проверки:

То, что сеансы работают нормально на каждом отдельном сервере.

Убедитесь, что обработчик сеанса установлен правильно, используя phpinfo(), если вы работаете с большой базой данных на основе унаследованных/третьих сторон, возможно, что-то переопределяет ее.

Если вы используете сторонний код - например, phpbb - проверьте, что настройки cookie верны и там.

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