2009-07-11 11 views
19

Używam systemu CodeIgniter od jakiegoś czasu - ale it has to jest short comings. Jestem wdzięczna za to, czego mnie nauczyła, ale teraz potrzebuję biblioteki do nowego projektu, który nie jest codeigniter, więc szukam pomysłów, które biblioteki mają, a które nie. Prawdopodobnie będę musiał pobrać utwory z kilku bibliotek, aby uzyskać wszystko, czego potrzebuję.Najlepsza biblioteka dla sesji PHP

Po prostu rzuciłem okiem na bibliotekę Kohana PHP session i podoba mi się sposób, w jaki wraca do natywnego sposobu użycia superglobalu $ _SESSION zamiast wymuszania zmiany na $ this-> session w celu uzyskania dostępu do danych.

W każdym razie chciałem się dowiedzieć, czy są tam inne dobre biblioteki sesyjne, które mogą mi dokuczać. Jest wiele rzeczy, które należy obsłużyć podczas sesji oprócz funkcjonalności CRUD.

  • Wsparcie dla non-cookie sesji opartej przechodzącej (tj Facebooka lub przesyłające flash)
  • „danych Flash”, który trwa tylko do następnego ładowania strony, a następnie jest automatycznie usuwane.
  • Działa z sesją $ _SESSION lub $ this->, dzięki czemu programiści nie muszą zmieniać istniejącego kodu.
  • Umożliwia ustawienie nowego identyfikatora sesji (tj. Identyfikator_sesji ("nowy identyfikator")) w przypadku, gdy chcesz zmienić identyfikator 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).
  • Umożliwia przechowywanie plików, plików cookie lub baz danych. (lub memcached byłoby miło)
  • Próba odmowy dostępu w przypadku przejęcia sesji. (IP, useragent lub fingerprint)

Właśnie spędziłem trochę czasu, wykraczających ponad logiki dla bibliotek sesji CodeIgniter i Kohana i wpadłem na następujący sposób 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 
} 
+0

+1. To było w moim umyśle od czasu do czasu. Dziękujemy za przedstawienie szczegółów. – andyk

Odpowiedz

5

Czy spojrzeć na Zend_Session?

  • można przekazać identyfikator sesji za pomocą adresu URL za pomocą ustawień PHP
  • można wygasają niektórych zmiennych sesji przez czas lub przez chmielu (kupna)
  • migracji do innych aplikacji nie będzie to łatwe i myślę nie jest to zbyt dobre, gdy używasz $_SESSION, gdy używasz opartego na ad-fate-u podejścia do zapisywania danych sesji. Dołączono save-handler dla DB, ale jego architektura umożliwia przekazywanie niestandardowych procedur obsługi.
  • Zend_Session obsługuje weryfikatory do sprawdzania ważności sesji. Tutaj również mamy otwartą architekturę, która pozwala przekazywać niestandardowe obiekty do sprawdzania poprawności.
  • można zablokować sesję, aka uczynić go tylko do odczytu
  • można zapobiec konkretyzacji wielu wystąpień tej samej przestrzeni nazw sesji
  • plus jest dużo więcej do odkrycia z Zend_Session takich jak regenerująca identyfikatory sesji, Wydawaj pliki cookie typu "pamiętasz mnie", odwołuj pliki cookie typu "pamiętasz mnie" i tak dalej.
+0

Dzięki za przypomnienie. Zend zwykle obejmuje wszystkie swoje bazy, więc jest to świetny kod do sprawdzenia. Jednak w 10 plikach tylko do obsługi sesji - myślę, że będę ciągnąć niektóre z lepszych części, więc nie zepsuję niczego, pisząc własne. Klasa Zend Session zdaje się podążać bliżej klasy Kohana, opierając się na superglobalnych kontrolerach sesji $ _SESSION - co z pewnością wydaje się być właściwą drogą. – Xeoncross

3

Możesz użyć tego w CI: EchoSession.

+0

Dzięki, ale tak jak powiedziałem, to nie będzie dla projektu codeigniter. Właściwie to już pobrałem tę bibliotekę podczas przeglądania Zend_Session i wielu innych bibliotek sesji. Przeglądając kod każdego z nich, zaczynają pojawiać się wzmianki o tym, jakie "najlepsze praktyki" dotyczą obsługi sesji. – Xeoncross

3

Ok, Po przejrzeniu niestandardowej, nie-$ _ SESJI opartej na codeigniter, dwóch bibliotekach Kohana i Zend (które używają $ _SESSION) i kilku innych bibliotek sesji z innych projektów, wierzę, że buduję odpowiedź na mój problem. Coś, co spełnia wszystkie wymienione powyżej rzeczy (z wyjątkiem danych flash).

Here is the code jeśli ktoś chce go użyć lub przeczytać go podczas budowania własnej biblioteki. Zostawiłem wiele komentarzy dokładnie wyjaśniających całą sprawę i chciałabym mieć jakąś opinię na ten temat. Obsługuje tokeny, przesyłające pliki flash, pliki cookie, regenerację sesji co 5 minut (lub cokolwiek, co ustawisz), usuwając stare sesje i obsługę sesji w dowolnej bazie danych, systemie plików, memchache lub dowolnej innej formie, którą chcesz zestaw.

2

spojrzeć Zebra_Session, a wrapper for PHP’s default session handling functions, using MySQL for storage

  • działa jako otoczka do domyślnej sesji funkcji obsługi PHP, ale zamiast przechowywania danych sesji w plikach płaskich przechowuje je w bazie danych MySQL, zapewniając większe bezpieczeństwo i lepszą wydajność

  • jest to zamiennik i pozorny zamiennik dla domyślnej obsługi sesji PHP: sesje PHP będą używane w taki sam sposób, jak przed użyciem biblioteki; nie musisz zmieniać żadnego istniejącego kodu!

  • realizuje blokad rekordów, zapewniając, że dane są poprawnie obsługiwane w scenariuszach ze stwardnieniem jednoczesnego AJAX żąda

  • jeden plik tylko

  • dojrzały, wysoce zoptymalizowany i stale rozwijany

  • very good documentation