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
}
Author: Xeoncross, 2009-07-11

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żywasz Zend_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.
 5
Author: Stefan Gehrig,
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ć.

 3
Author: Xeoncross,
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 .

 3
Author: Pedro,
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

  • Bardzo dobra dokumentacja

 2
Author: Stefan Gabos,
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