Po pierwsze, sesje PHP nie są domyślnie przechowywane w pamięci , są one przechowywane na dysku, więc każdy blok/sesja, do której piszesz, będzie zajmować miejsce na dysku, a nie pamięć (dopóki nie użyjesz PHP do odczytania danych sesji).
Tak, potencjalnie jesteś bardziej wydajny, ale nie, jeśli chcesz skalować, a oto dlaczego:
Przechowywanie danych w sesjach
Przechowywanie niektórych jest całkowicie dopuszczalne dane w sesjach. Teoretycznie nie ma limitu (chociaż nigdy nie próbowałem go przełamywać ani nawet go przepychać, po prostu przejdź do wydajniejszego rozwiązania). Będziesz jednak ograniczony przez miejsce na dysku i PHP memory_limit()
.
Często dane przechowywane w sesjach obejmują takie elementy, jak:
- Nazwy użytkownika
- Hasze
- Daty rejestracji
- Inne zmienne (identyfikatory/klucze grup użytkowników itp.)
- Wiadomości Flash
- (NIE hasła!)
Istnieje jednak kompromis. Jeśli Twój ruch (i użycie) wzrośnie i przechowujesz dużo danych w $_SESSION
, najprawdopodobniej zaczniesz widzieć problemy, zarówno pod względem wykorzystania dysku, jak i pamięci.
Nie sądzę, aby był jakiś problem z tym, co sugerujesz, ale poza wymienionymi przez Ciebie pozycjami i miejscami, w których powyższe przykłady się pokrywają, wymagana jest ostrożność.
Jeśli chcesz skalować (w poziomie) i zachować sesje na dysku, masz opcje ( przyklejone sesje lub sieć pamięci masowej są parą), ponieważ dysk na jednym serwerze nie przechowuje tych samych sesji, co dysk na innym serwerze.
Lokalizacja danych sesji
Możesz znaleźć lokalizację, w której PHP przechowuje dane sesji, wywołując: session_save_path()
lub na CLI:
php -r 'echo session_save_path(), "\n";'
Nie wspomniałeś o swoim systemie operacyjnym, ale typowe lokalizacje plików sesji (w różnych typach systemów operacyjnych):
/tmp
/var/lib/php5/
/var/lib/php/session
c:/wamp/tmp
Sesje przechowywane na dysku zwykle mają nazwy plików, które wyglądają tak przy użyciu ls -al
:
-rw------- 1 www www 0 2013-07-09 20:12 sess_bdsdjedmvtas5njhr5530b8rq6
Warto zauważyć, że często istnieją procesy zbierania śmieci, które usuwają martwe sesje po określonych okresach. Różni się w zależności od systemu operacyjnego, ale zwykle są one obecne w różnych instalacjach opartych na LAMP.
Inne opcje/podejścia do przechowywania sesji
W Twojej bazie danych
Dane sesji są często przechowywane w bazie danych zamiast na dysku lokalnym i działa to dobrze zarówno w przypadku mikro, małych, jak i (w zależności od tego, jak to się robi) średnich witryn o rozsądnym poziomie ruchu.
Jak każde inne rozwiązanie, ma swoje zalety i wady (jak możliwość zbanowania/wyrzucenia użytkownika przez uruchomienie zapytania zamiast usuwania pliku sesji z /tmp
)
W pamięci
W przypadku większych witryn (o większym ruchu), a zwłaszcza tam, gdzie liczba jednoczesnych użytkowników jest duża, pamięć jest szybsza do odczytu/zapisu w przypadku bardzo często używanych zmiennych lub danych, zamiast niepotrzebnego obciążania bazy danych. Może i nadal powinien być zapisany w bazie danych (patrz buforowanie z zapisem ), ale także przechowywane w pamięci w celu zapewnienia efektywnego dostępu.
Jedną z technik o szczególnej wartości jest buforowanie pamięci . Powszechnie używanym przykładem rozwiązania open source zgodnego z PHP jest Memcached , który może być używany na jednym serwerze lub wielu [rozproszonych]. Widziałem to używane zarówno przez małe, jak i duże firmy i wystarczy spojrzeć na to, kto z nich korzysta/wnosi wkład...