Първо, PHP сесиите не се съхраняват в паметта по подразбиране , те се съхраняват на диск, така че всеки блок/сесия, в която пишете, ще заема дисково пространство, а не памет (докато не използвате PHP за четене на данните за сесията).
Да, потенциално сте по-ефективни, но не и ако искате да мащабирате и ето защо:
Съхранение на данни в сесии
Напълно приемливо е да съхранявате някои данни в сесиите. Теоретично няма ограничение (въпреки че никога не съм се опитвал да го счупя или дори да го натисна, просто преминете към по-ефективно решение). Въпреки това ще бъдете ограничени от дисково пространство и PHP memory_limit()
.
Често данните, съхранявани в сесиите, включват неща като:
- Потребителски имена
- Хешове
- Дати на регистрация
- Други променливи (идентификатори на потребителска група/ключове и т.н.)
- Flash съобщения
- (НЕ пароли!)
Има обаче компромис. Ако вашият трафик (и употреба) се увеличава и съхранявате много данни в $_SESSION
, много вероятно ще започнете да виждате проблеми, както по отношение на използването на диск, така и на паметта.
Не мисля, че има някакъв проблем с това, което предлагате, но освен елементите, които сте изброили и където примерите по-горе се припокриват, е необходимо внимание.
Ако искате да мащабирате (хоризонтално) и да запазите базирани на диск сесии, тогава имате опции ( лепкави сесии или мрежа за съхранение са двойка), тъй като дискът на един сървър не съхранява същите сесии като диск на друг сървър.
Местоположение на данните за сесията
Можете да намерите местоположението, където PHP съхранява данни за сесията, като извикате: session_save_path()
или в CLI:
php -r 'echo session_save_path(), "\n";'
Не сте споменали вашата ОС, но често срещаните местоположения за файловете на сесиите (в различните типове ОС) са:
/tmp
/var/lib/php5/
/var/lib/php/session
c:/wamp/tmp
Сесиите, съхранени на диска, обикновено имат имена на файлове, които изглеждат така с помощта на ls -al
:
-rw------- 1 www www 0 2013-07-09 20:12 sess_bdsdjedmvtas5njhr5530b8rq6
Струва си да се отбележи, че често има процеси за събиране на боклук, които изчистват мъртвите сесии след определени периоди. Тя варира в зависимост от ОС, но те обикновено присъстват с различни LAMP-базирани инсталации.
Други опции/подходи за съхранение на сесия
В базата ви данни
Данните за сесиите често се съхраняват в DB вместо на локален диск и това работи добре както за микро, малки, така и (в зависимост от това как се прави) средни сайтове с разумно ниво на трафик.
Както всяко друго решение, то има своите плюсове и минуси (като възможността да забранява/изхвърля потребител чрез стартиране на заявка, вместо да изтрива файл на сесия от /tmp
)
В памет
за по-големи (с по-висок трафик) сайтове и особено там, където обемът на едновременните потребители е голям, паметта е по-бърза за четене/запис за много често достъпни променливи или данни, вместо да се добавя ненужно натоварване към вашата БД. Може и все пак трябва да се записва в DB (вижте кеширане чрез запис ), но също така да се съхранява в паметта за ефективен достъп.
Една техника с особена заслуга е кеширането на паметта . Широко използван пример за PHP-съвместимо решение с отворен код е Memcached , който може да се използва на един сървър или много [разпределени]. Виждал съм, че това се използва както от малки фирми, така и от големи и трябва само да погледнете кой го използва/допринася...