Najlepsza biblioteka dla sesji PHP [zamknięta]
Od jakiegoś czasu używam systemu CodeIgniter-ale ma {[3] }tokrótkie comingi . Jestem wdzięczny za to, czego mnie to nauczyło, ale teraz potrzebuję biblioteki dla nowego projektu non-codeigniter, więc rozglądam się za pomysłami, które biblioteki mają wszystko dobrze, a które nie. prawdopodobnie będę musiał wziąć kawałki z kilku bibliotek, aby uzyskać wszystko, czego potrzebuję.
Właśnie zajrzałem do biblioteki Kohana PHP session i podoba mi się jak wraca do natywny sposób użycia superglobalu $_SESSION zamiast wymuszania zmiany NA $ this->session dla dostępu do danych.
W każdym razie, chciałem wiedzieć, czy są tam inne dobre biblioteki sesyjne, które mogę namieszać. Jest wiele rzeczy, które muszą być obsługiwane w sesji oprócz tylko CRUD funkcjonalnie.
- Facebook lub Flash uploadery)
- wsparcie dla przekazywania sesji nie opartych na plikach cookie (np. Facebook lub flash uploadery)
- "Flash data", który trwa tylko do następnego załadowania strony, a następnie jest Auto-usunięte.
- Działa z $_SESSION lub $this - > session, dzięki czemu programiści nie muszą zmieniać istniejącego kodu.
- obsługuje ustawianie nowego id sesji (np. session_id('new id')) w przypadku, gdy chcesz zmienić id w połowie strony.
- zapisuje wszystkie dane na końcu żądania strony zamiast za każdym razem, gdy dane są dodawane lub usuwane (zapisuje dodatkowe zapytania DB).
- obsługuje używanie Plików, plików cookie lub bazy danych do przechowywania. (lub memcached byłby ładne)
- próbuje odmówić dostępu w przypadku przejęcia sesji. (IP, useragent, or fingerprint )
Właśnie spędziłem trochę czasu nad logiką dla bibliotek sesji CodeIgniter i Kohana i wymyśliłem następujące informacje o tym, jak każda zaczyna się i kończy sesje dla strony.
/**************
** Kohana Sessions
**************/
If not native file storage {
session_set_save_handler to the storage type (DB, cache, cookie...)
}
set the session_name() so php knows what cookie value to check
start session
/****** Saving ******/
session_write_close() which calls the given handler
/**************
** CI Sessions
**************/
Try to read_session() -> {
session = Get cookie (if using cookies will also contain data)
if(database) {
session .= pull data from database
}
checks if valid...
$this->userdata = session data
} else {
create a new one
}
/****** Saving ******/
session data is serialized either way
if(cookie) {
save cookie with serialized data and params like "last_activity"
}
if(database) {
save serialized data in db and session in cookie
}
4 answers
Czy przyjrzałeś się Zend_Session
?
- możesz przekazać identyfikator sesji za pomocą adresu URL za pomocą ustawień PHP Możesz wygasnąć niektóre zmienne sesji według czasu lub przez chmiel (żądania)
- migracja do innych aplikacji nie będzie taka łatwa i myślę, że nie jest zbyt dobra, gdy zadzierasz z
$_SESSION
Kiedy używaszZend_Session
-
Zend_Session
ma podejście oparte na adpater do zapisywania danych sesji. Zawiera save-handler dla DBs, ale jego architektura pozwala na niestandardowe manipulatory do przekazania. -
Zend_Session
obsługuje walidatory do sprawdzania poprawności sesji. Tutaj też mamy otwartą architekturę, która pozwala na przekazywanie niestandardowych obiektów do walidacji. - możesz zablokować sesję, czyli zrobić ją tylko do odczytu
- można zapobiec tworzeniu instancji wielu instancji tej samej przestrzeni nazw sesji
- plus jest o wiele więcej do odkrycia za pomocą
Zend_Session
, takich jak regenerowanie identyfikatorów sesji, wydawanie Zapamiętaj-mnie-cookies, odwoływanie Zapamiętaj-mnie-ciasteczka i tak dalej.
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
2015-05-26 13:40:03
Ok, po przekopaniu się przez niestandardowe, nie oparte na$_SESSION codeigniter lib, dwie biblioteki Kohana i Zend (które używają $_SESSION), i kilka innych bibliotek sesji z innych projektów wierzę, że buduję odpowiedź na mój problem. Coś, co spełnia wszystkie rzeczy wymienione powyżej (oprócz danych flash).
Oto kod , Jeśli ktoś chce go używać lub czytać podczas budowania własnej biblioteki. Zostawiłam wiele komentarzy dokładnie wyjaśniających całość i chciałbym mieć jakieś opinie na ten temat. Obsługuje tokeny, uploadery flash, pliki cookie, regenerację sesji co 5 minut (lub cokolwiek ustawisz) z usuwaniem starych sesji i wsparcie dla przechowywania sesji w dowolnej bazie danych, systemie plików, memchache lub innej formie, którą chcesz ustawić.
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
2009-07-15 21:37:28
Możesz użyć tego w CI: EchoSession .
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-06-30 12:16:03
Zebra_Session, wrapper dla domyślnych funkcji obsługi sesji PHP, wykorzystujący MySQL do przechowywania
-
PHP działa jako wrapper dla domyślnych funkcji obsługi sesji, ale zamiast przechowywania danych sesji w plikach płaskich, przechowuje je w bazie danych MySQL, zapewniając lepsze bezpieczeństwo i lepszą wydajność
Jest to drop-in i pozornie bezstratny zamiennik dla domyślnej obsługi sesji PHP: sesje PHP będą używane w taki sam sposób, jak przed korzystanie z biblioteki; nie musisz zmieniać żadnego istniejącego kodu!
-
Implementuje blokady wierszy, zapewniając, że dane są poprawnie obsługiwane w scenariuszach z wieloma jednoczesnymi żądaniami AJAX
-
Tylko jeden plik
-
Dojrzały, wysoce zoptymalizowany i stale rozwijany
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
2012-07-29 10:06:15