2011-11-17 11 views
5

Jak utworzyć obiekt współdzielony między różnymi sesjami w PHP?Jak utworzyć obiekt współdzielony między różnymi sesjami w PHP?

Mam na myśli użycie tabeli pamięci lub MySQL. Używanie pliku nie jest dobrą opcją, ponieważ nie ma blokowania i jest wolne. Używanie tabeli pamięci MySQL jest dobrym rozwiązaniem, ale jak zapisać wystąpienia klas (obiekty) w tabeli? Serializowanie obiektu i umieszczanie go na stole jest również powolne.

Option 1: MySQL memory table 
Option 2: shm_attach,shm_detach,shm_get_var,shm_has_var,shm_put_var,.. 
Option 3: Memcache 

Problem polega na użyciu tabeli pamięci MySQL wymagającej sprawdzania. Memcache nie znajduje się w standardowej instalacji PHP. Aby mieć funkcje shm_ * w systemie Windows, wymagane jest, aby PHP było zbudowane ze źródła z opcją "--enable-sysvsem", a to wymaga ustawienia w php.ini, gdzie deweloper może nie mieć dostępu cały czas.

Który z powyższych jest lepszy? Jakieś inne opcje?

+1

Wspólna pamięć jest jedną z opcji: http://php.net/manual/en/function.shm-get-var.php –

+2

Jakie dane dotyczą? jak wygląda ten "obiekt"? – ManseUK

+0

to instancja klasy o strukturze wielopoziomowej (podobnej do tablicy wielopoziomowej) – jondinham

Odpowiedz

1

Jeśli chcesz udostępnić obiekty (wystąpienia klas) między różnymi procesami, zawsze będziesz zobowiązany do serialize i unserialize niezależnie od tego, jakiego rodzaju używanej warstwy pamięci (baza danych, pamięć, pliki ...).

Jeśli nie chcesz używać serialize i unserialize, niewiele możesz zrobić.

+0

Marc B zasugerował użycie funkcji semafora php shm_ *, ale wymaga to przekazania parametru do php.exe, aby go włączyć. to jest to, co mogę zrobić na moim komputerze, ale nie na moim wspólnym serwerze hostingowym. jestem dość zagmatwany teraz – jondinham

+0

@JonDinham, Nawet jeśli używasz plików Najpierw musisz serializować dane, prawda? – Pacerier

1

Pamiętam, że widziałem podobny problem z rozwiązaniem w rozwoju eyeOS.

Wiem, że nie jest tak, aby wyjść z tego, że korzystasz z pliku, ale co jeśli chcesz przechowywać zmienne, które chcesz udostępnić w formacie xml.

Jeśli chcesz, aby był on specyficzny dla niektórych sesji, możesz użyć unikalnych tokenów (hasła sortowania) dla każdego zestawu sesji i skonfigurować kontroler, który kieruje żądania do prawidłowego pliku xml sesji na podstawie tokena.

Ze względów bezpieczeństwa można przechowywać informacje o xml w pliku php i umożliwiać pobieranie informacji tylko przez POST przy użyciu poprawnego tokena.

Ta metoda umożliwia bezpieczny dostęp, edycję i usuwanie (niszczenie) udostępnianych sesji.

1

Memcache nie znajduje się w standardowej instalacji PHP. Semafor & funkcje pamięci współdzielonej nie są obsługiwane w systemie Windows.

Najprawdopodobniej jedynym rozwiązaniem jest użycie tablicy pamięci MySQL z serializacją obiektów.

1

nie widzę APC wymienić:

http://www.php.net/manual/en/book.apc.php

Nie jestem pewien, czy to w ciągu jednej sesji jako podręcznik brakuje żadnych informacji o tym, co robi, ale w innych postach widzę na alternatywę dla memcache.

Szukam prostego rozwiązania do przechowywania szablonów stron, które mogą być często używane i przechowywania uwierzytelnionych użytkowników w tabeli w pamięci zamiast korzystania z sesji php (druga część nie jestem tego pewien).

Powiązane problemy