Jak zarządzać pojedynczą sesją PHP5 na wielu serwerach apache?

Witam muszę pobrać dane z kilku serwerów WWW. Najpierw loguję się jako użytkownik na mojej stronie internetowej. Po pomyślnym zalogowaniu muszę pobrać dane z różnych serwerów i wyświetlić. Jak mogę udostępnić jedną sesję wielu serwerom. Jak mogę to osiągnąć?

Podczas pierwszego logowania tworzy sesję i identyfikator sesji zapisany w folderze tymczasowym tego serwera. Kiedy próbuję uzyskać dostęp do innego serwera, Jak mogę korzystać z bieżącej sesji, która została już utworzona po zalogowaniu. Czy ktoś może zasugerować rozwiązanie?

Author: Ian Lewis, 2011-06-27

5 answers

Będziesz musiał użyć innego narzędzia obsługi sesji.

Możesz:

 13
Author: Artefacto,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-03-09 12:56:48

Inną opcją byłoby użycie memcached do przechowywania sesji.

Ważne jest to, że musisz mieć współdzielony zasób - czy to baza danych SQL, memcached, baza danych NoSQL itp. dostęp do wszystkich serwerów. Następnie używasz session_set_save_handler, aby uzyskać dostęp do udostępnionego zasobu.

 7
Author: chiborg,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-06-27 09:30:14

W uzupełnieniu do wszystkich tych odpowiedzi:

Jeśli przechowujesz sesje w bazach danych, sprawdź, czy zbieranie śmieci sesji w PHP jest naprawdę aktywowane (nie jest tak w przypadku dystrybucji podobnych do Debiana, zdecydowali się usunąć sesje z własnego crona i zmodyfikowali php.ini tak, że nigdy nie uruchamia żadnego gc, więc sprawdź session.gc_probability i session.gc_divisor). Głównym problemem sesji w bazie danych jest to, że oznacza to wiele zapytań do zapisu i wiele sprzecznych dostępu do bazy danych. To to świetny sposób na podkreślenie serwera bazy danych takiego jak MySQL. Więc IMHO korzystanie z innego rozwiązania jest lepsze, to utrzymuje stosunek odczytu/zapisu w lepszy sposób web-bazy danych.

Możesz również zachować system przechowywania plików i po prostu udostępnić katalog plików między serwerami za pomocą NFS . Zmień ustawienie session.save_path, aby używać czegoś innego niż /tmp. Ale NFS nie jest z definicji najszybszy wày korzystania z dysku. Preferuj memcached lub mongodb dla szybkiego dostępu.

If the only thing you need to udostępnianie pomiędzy serwerami to uwierzytelnianie , wtedy zamiast udostępniać rzeczywisty magazyn sesji można udostępniać poświadczenia uwierzytelniania. Jak OpenID OpenID w SO, to jest to, co nazywamy SSO, dla strony internetowej masz kilka rozwiązań, od OpenIddo CAS, i inne. Jeśli dane są scalane po stronie klienta (ajax, ESI-gate), to tak naprawdę nie potrzebujesz wspólnego przechowywania danych sesji po stronie serwera. Pozwoli to uniknąć wpływu 3 z 5 aplikacji sieci web zapisywanie danych w sesji współdzielonej w tym samym czasie. Inne techniki współdzielenia sesji (baza danych, NFS, nawet memcached) są najczęściej używane do współdzielenia danych między kilkoma serwerami, ponieważ narzędzia równoważenia obciążenia mogą umieścić sekwencyjne żądanie HTTP z jednego serwera na drugi, ale jeśli naprawdę masz na myśli równoległe zbieranie danych, powinieneś naprawdę przestudiować SSO.

 7
Author: regilero,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-03-21 08:41:02

Przechowuj sesje w bazie danych, która jest dostępna z całej puli serwerów.

 5
Author: Bjorn,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-06-27 09:28:51

Przechowuj go w bazie danych - pobierz Wszystkie serwery, aby połączyły się z tą samą bazą danych. Pierwszy wynik dla " PHP store session in database "

 5
Author: tucuxi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-06-27 09:29:06